Генератор цветов Уроки C++ Уроки Windows forms Учебники по программированию Уроки HTML Уроки CSS Готовые задания Исходники Полезные программы
регистрация доменов

Дешёвые домены


Уроки C++


Сортировка Вставками C++

Данный вид сортировки тоже весьма прост, но в отличие от сортировки “Выбором”, в которой массив каждый раз проверяется весь заново, сортировка “Вставками”, найдя минимальный (или максимальный) элемент ставит его на первое место и далее проверяет уже массив без этого элемента, тем самым – с каждой проверкой уменьшается количество сортируемых элементов.
Предположим есть массив из 5 элементов:  4  7  3  -1  2
1)  -1    остаётся:  4  7  3  2
2)  -1  2    остаётся:  4  7  3
3)  -1  2  3    остаётся:  4  7
4)  -1  2  3  4    остаётся:  7
5) Результат:  -1  2  3  4  7

Ну а вот сам код данной сортировки:



#include "stdafx.h"
#include "iostream"
#include "time.h"
#include "iomanip"

using namespace std;

void InsertionSort(int *, int);   // объявление функции сортировки

int main()
{
setlocale(LC_ALL, "Russian");
int n;   // Количество элементов массива
cout << "Введите размер массива: ";
cin >> n;
cout << endl;
cout << "Массив: " << endl;
int *mas = new int [n];
srand(time(NULL));
for (int i = 0; i < n; i++)
{
mas[i] = rand() % 200 - 100;   // заполняем массив случайными числами
cout << mas[i] << " ";   // выводим массив на экран
}
cout << "\n\n";

InsertionSort(mas, n);   // вызываем функцию сортировки Вставками
cout << "Отсортированный массив: " << endl;
for (int i = 0; i < n; i++)
{
cout << mas[i] << " ";   // Вывод на экран отсортированного массива
}
cout << "\n\n";
system("PAUSE");
return 0;
}

void InsertionSort(int *sort_el, int length)   // сортировка Вставками
{
int temp,   // временная переменная, храненящая значения элемента сортируемого массива
pr;   // индекс предыдущего элемента
for (int j=1; j < length; j++)
  {
temp = sort_el[j]; // инициализируем временную переменную текущим значением элемента массива
pr = j-1;   // запоминаем индекс предыдущего элемента массива
while(pr >= 0 && sort_el[pr] > temp)   // пока индекс не равен 0 и предыдущий элемент массива больше текущего
    {
sort_el[pr + 1] = sort_el[pr];   // перестановка элементов массива
sort_el[pr] = temp;
pr--;
    }
  }
}


Результат:



<< К списку сортировок