Сортировка выбором - C (СИ) (150153)
Формулировка задачи:
Нужно отсортировать массив по возрастанию
#include<stdio.h>
int main()
{
int temp=0;
int j=1,i=5;
int Arr[i];
Arr[0]=5;
Arr[1]=4;
Arr[2]=3;
Arr[3]=2;
Arr[4]=1;
printf("%i",Arr[0]);
printf("%i",Arr[1]);
printf("%i",Arr[2]);
printf("%i",Arr[3]);
printf("%i",Arr[4]);
}Решение задачи: «Сортировка выбором»
textual
Листинг программы
#include<stdio.h>
void selectSort(int* arr, int size)
{
int tmp, i, j, pos;
for(i = 0; i < size; ++i) // i - номер текущего шага
{
pos = i;
tmp = arr[i];
for(j = i + 1; j < size; ++j) // цикл выбора наименьшего элемента
{
if (arr[j] < tmp)
{
pos = j;
tmp = arr[j];
}
}
arr[pos] = arr[i];
arr[i] = tmp; // меняем местами наименьший с a[i]
}
}
int main()
{
int temp=0;
int j=1,i=5;
int Arr[i];
Arr[0]=5;
Arr[1]=4;
Arr[2]=3;
Arr[3]=2;
Arr[4]=1;
slectionSort(Arr, 5);
printf("%i",Arr[0]);
printf("%i",Arr[1]);
printf("%i",Arr[2]);
printf("%i",Arr[3]);
printf("%i",Arr[4]);
}
Объяснение кода листинга программы
- Включаем заголовочный файл
для использования функций ввода-вывода - Задаём размер массива Arr в функции main() равным 5
- Инициализируем элементы массива Arr в функции main()
- Вызываем функцию selectSort(Arr, 5) для сортировки массива Arr
- Выводим отсортированный массив Arr в функции main() с помощью функции printf()
- Значения переменных i и j в функции main() инициализируются как 5 и 1 соответственно.
- Значение переменной temp в функции main() инициализируется как 0.
- Значения переменных Arr[0], Arr[1], Arr[2], Arr[3], Arr[4] в функции main() инициализируются как 5, 4, 3, 2, 1 соответственно.
- В цикле выбора наименьшего элемента внутренний цикл for(j = i + 1; j < size; ++j) выполняется от i+1 до size-1 раз.
- Внутренний цикл for(j = i + 1; j < size; ++j) выполняется столько раз, сколько существует элементов в массиве, начиная с элемента, следующего за текущим элементом.
- Переменная pos в функции selectSort(int* arr, int size) инициализируется как i.
- Переменная tmp в функции selectSort(int* arr, int size) инициализируется как arr[i].
- Переменная size в функции selectSort(int* arr, int size) инициализируется как размер массива arr.
- Переменная i в функции selectSort(int* arr, int size) инициализируется как 0 и увеличивается на 1 на каждой итерации внешнего цикла for(i = 0; i < size; ++i).
- На каждой итерации внешнего цикла for(i = 0; i < size; ++i) внутренний цикл for(j = i + 1; j < size; ++j) выполняется заново, начиная с элемента, следующего за текущим элементом.
- Внутренний цикл for(j = i + 1; j < size; ++j) выполняется столько раз, сколько существует элементов в массиве, начиная с элемента, следующего за текущим элементом.
- Если arr[j] меньше, чем tmp, то переменная pos обновляется до j, а переменная tmp обновляется до arr[j].
- Переменная pos в функции selectSort(int* arr, int size) используется для хранения текущего наименьшего индекса.
- Переменная tmp в функции selectSort(int* arr, int size) используется для временного хранения наименьшего элемента.
- Внутренний цикл for(j = i + 1; j < size; ++j) выполняется столько раз, сколько существует элементов в массиве, начиная с элемента, следующего за текущим элементом.