Сортування методом вставок

Автор: Пользователь скрыл имя, 22 Января 2012 в 14:19, курсовая работа

Описание работы

Постановка задачі
Впорядкувати вибраний випадковим чином масив з десяти цілих чисел за зростанням та за спаданням ( тобто переставити його елементи так, щоб для всіх i виконувалась умова відповідно), використовуючи метод сортування вставками.

Содержание

Постановка задачі…………………………………………………………..3
Теоретичне обґрунтування і алгоритм вирішення задачі………………..3
Код програми з коментарями……………………………………………...3
Зовнішній вигляд вікна програми………………………………………..10
Список використаної літератури………………………………………...11

Работа содержит 1 файл

Метод сортування вставками.docx

— 76.20 Кб (Скачать)

             n=a[i];

            // Номер попереднього елемента

            m=i-1;

            // Порівнюємо з попереднім елементом

            /* Якщо поточний елемент менший від попереднього, то переставляємо його ближче до початку масиву */

            /* Повторюємо, доки не дійдемо до початку масиву або доки попередній елемент не виявиться меншим за поточний */

           while ((m>=0)&&(a[m]>n)) // Якщо дана умова виконується.

             {

                a[m+1]=a[m];  // Міняємо місцями поточний і попередній елементи.

                 m=m-1;           // Зміщуємо попередній елемент на одиницю.

                 a[m+1]=n;       // Вставляємо на місце зміщеного елемента поточний елемент.

             } 

             for (int k=0;k<10;k++) // Виведення результатів сортування у вікно програми

             {

                      if (a[k]>9)

                            intToStr(a[k]);

                      if(a[k]<10)

                            intToStr2(a[k]); 

                      if(a[k]<10) TextOut(hdc, 20 + 20 * k,80 + 20 * counter,dep, 1);

                      if(a[k]>9)  TextOut(hdc, 20 + 20 * k,80 + 20 * counter,dep, 2);

             }

             counter++;

          }

          counter=1; 

          fout << "Сортування за зростанням:\t "; // Збереження результатів сортування у файлі

          for (i=0;i<10;i++)

          {

                fout << a[i] << " ";

          }

                fout << "\n";

    } 

    void decSort()// Функція сортування за спаданням

    {

          // Починаємо з другого елемента

         for (i=1;i<10;i++)

          {

                // Поточний  елемент

             n=a[i];

             // Номер попереднього елемента

             m=i-1;

                // Порівнюємо  з попереднім елементом

            /* Якщо поточний елемент більший від попереднього, то переставляємо його ближче до початку масиву */

             /* Повторюємо, доки не дійдемо до початку масиву або доки попередній елемент не виявиться більшим за поточний*/

            while ((m>=0)&&(a[m]<n)) // Якщо дана умова виконується.

          {

                a[m+1]=a[m]; // Міняємо місцями поточний і попередній елементи.

                 m=m-1;       // Зміщуємо попередній елемент на одиницю.

                 a[m+1]=n;  // Вставляємо на місце зміщеного елемента поточний елемент.

          } 

          for (int k=0;k<10;k++) // Виведення результатів сортування у вікно програми

          {

                 if (a[k]>9)

                      intToStr(a[k]);

                if(a[k]<10)

                      intToStr2(a[k]); 

                if(a[k]<10) TextOut(hdc, 300 + 20 * k,80 + 20 * counter,dep, 1);

                if(a[k]>9)  TextOut(hdc, 300 + 20 * k,80 + 20 * counter,dep, 2);

          }

             counter++;

          }

          counter=1; 

          fout << "Сортування за спаданням:\t "; // Збереження результатів сортування у файлі

          for (i=0;i<10;i++)

          {

                fout << a[i] << " ";

          }

          fout << "\n"; 

    } 

    void intToStr(int pos) /* Функція перетворення двоцифрових цілочислових змінних в текстові символи */

    {

          int inter;

          char c; 

          for(int i=1; i<3; i++) // Проходимо цикл двічі, оскільки маємо двоцифрове число

          {

                inter = pos % 10; // Починаємо перетворення цифри з розряду одиниць 

                switch(inter)

                {

                      case 0: c = '0';   break;

                      case 1: c = '1';   break;

                      case 2: c = '2';   break;

                      case 3: c = '3';   break;

                      case 4: c = '4';   break;

                      case 5: c = '5';   break;

                      case 6: c = '6';   break;

                      case 7: c = '7';   break;

                      case 8: c = '8';   break;

                      case 9: c = '9';   break;

                }

         

                dep[2-i] = c;   // Записуємо результат перетворення в текстову змінну

                pos = pos/10; // Переходимо до розряду десятків

          }

    } 

    void intToStr2(int pos) /* Функція перетворення одноцифрових цілочислових змінних в текстові символи */

    {

          int inter;

          char c; 

          for(int i=1; i<2; i++) // Проходимо цикл тільки 1 раз оскільки маємо одноцифрове число число

          {

                inter = pos; 

                switch(inter)

                {

                      case 0: c = '0';   break;

                      case 1: c = '1';   break;

                      case 2: c = '2';   break;

                      case 3: c = '3';   break;

                      case 4: c = '4';   break;

                      case 5: c = '5';   break;

                      case 6: c = '6';   break;

                      case 7: c = '7';   break;

                      case 8: c = '8';   break;

                      case 9: c = '9';   break;

                }

         

                dep[1-i] = c; // Записуємо результат перетворення в текстову змінну

          } 

    } 

    void CleanGen(void) // Функція очищення поля виводу згенерованого масиву

    {

          Rectangle(hdc,302,17,505,40);

    } 

    void CleanAsc(void) // Функція очищення поля виводу матриці сортування за зростанням

    {

          Rectangle(hdc,15,93,223,283);

    } 

    void CleanDec(void) // Функція очищення поля виводу матриці сортування за спаданням 

    {

          Rectangle(hdc,290,93,505,283);

    } 

    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

    {

        switch (message)                  /* handle the messages */

        {

                case WM_COMMAND:

                      hdc= GetDC(hwnd);

                      if(LOWORD(wParam)==IDB_BUTTON1) { CleanGen(); genArr(); }

                      if(LOWORD(wParam)==IDB_BUTTON2) { CleanAsc(); ascSort(); }

                      if(LOWORD(wParam)==IDB_BUTTON3) { CleanDec(); decSort(); }

                      if(LOWORD(wParam)==IDB_BUTTON4) PostQuitMessage (0);

                  break;

                case WM_DESTROY:

                  PostQuitMessage (0);        /* send a WM_QUIT to the message queue */

                  break;

             default:                         /* for messages that we don't deal with */

                  return DefWindowProc (hwnd, message, wParam, lParam);

        } 

        return 0;

    } 

  1. Зовнішній вигляд вікна програми

     

  1. Список  використаної літератури
  2. Іванов Б.Н. Дискретна математика. Алгоритми і програми. -  Москва , 2003. - 288 с.
  3. Кнут  Д. Искусство программирования. Том 3. Сортировка и поиск. -  Москва, 1978. - 355 с.
  4. Страуструп Б. Язык программирования С++. - Санкт - Петербург, 1999. - 991 с.

Информация о работе Сортування методом вставок