Одной из самых распространённых операций над массивами является их сортировка. Существует множество алгоритмов сортировки массивов, различающихся по поведению, быстродействию, требуемому объёму памяти, а также ограничениям, накладываемым на исходные данные.
Рассмотрим программу, которая сортирует по возрастанию целочисленный массив методом выбора. Алгоритм состоит в том, что выбирается наименьший элемент массива и меняется местами с первым элементом, затем рассматриваются элементы, начиная со второго, и наименьший из них меняется местами со вторым элементом, и так далее n-1 раз (при последнем проходе цикла при необходимости меняются местами предпоследний и последний элементы массива).
int main() {
const int N=5; // кол-во элементов массива
int b[N], i;
cout << "Vvedite " << N << " elementov massiva: " << endl;
for(i=0; i<N; i++) cin >> b[i];
for(i=0; i<N-1; i++) { //цикл сортировки массива
int imin = i; //принимаем за наименьший первый из элементов
for(int j=i+1; j<N; j++)
if(b[j] < b[imin]) imin = j; // поиск минимального
int a = b[i]; //обмен местами:
b[i] = b[imin];
b[imin] = a;
}
cout << "Otsortirovannyi massiv: ";
for(i=0; i<N; i++) cout << b[i] << " ";
getch(); return 0;
}
Рассмотрим в деталях ход выполнения программы. Пусть мы ввели следующие элементы массива:
Первый шаг: i=0; imin=0; j=1; b[1]<b[0] ложь;
j=2; b[2]<b[0] ложь;
j=3; b[3]<b[0] ложь;
j=4; b[4]<b[0] imin=4 => a=b[0]; b[0]=b[4]; b[4]=a Поменяли местами 0-ой и 4-ый, в результате имеем:
Второй шаг: i=1; imin=1; j=2; b[2]<b[1] imin=2;
j=3; b[3]<b[2] ложь;
j=4; b[4]<b[2] imin=4; => a=b[1]; b[1]=b[4]; b[4]=a
Поменяли местами 1-ый и 4-ый, в результате имеем: 1 2 3 4 5. И т.д.
Как вы думаете, что необходимо изменить в данной программе, чтобы сортировка производилась по убыванию? Ответ: if(b[j] > b[imin]) imin = j; .