Двухсторонняя сортировка выбором - нужен пример - C (СИ)
Формулировка задачи:
Помогите написать или найти код этой сортировки( она улучшает обычную сортировку выбором. кроме максимального элемента в неотсортированном подмассиве также находит и минимальный. Максимум при этом перемещать в конец подмассива, а минимум — в начало.
Решение задачи: «Двухсторонняя сортировка выбором - нужен пример»
textual
Листинг программы
- #include <stdio.h>
- #define n 10
- void swap(int *a,int *b)
- {
- int tmp;
- if(*a==*b) //отказываемся от замены одинаковых
- return;
- tmp=*a;
- *a=*b;
- *b=tmp;
- printf("%d <-> %d\n",*a,*b);
- }
- main()
- {
- int mas[n]={9,5,1,3,6,7,4,8,2,0};
- int max,min,max_index,min_index,i,j,k;
- k=n-1;
- for(i=0;i<=k;i++)
- {
- max=min=mas[i];
- max_index=min_index=i;
- for(j=i+1;j<=k;j++)
- {
- if(mas[j]>max)
- {
- max=mas[j];
- max_index=j;
- }
- if(mas[j]<min)
- {
- min=mas[j];
- min_index=j;
- }
- }
- if(max_index==i&&min_index!=k) //куча if-ов для обработки пограничных значений
- {
- swap(&mas[k],&mas[max_index]);
- swap(&mas[i],&mas[min_index]);
- }
- if(min_index==k&&max_index!=i)
- {
- swap(&mas[i],&mas[min_index]);
- swap(&mas[k],&mas[max_index]);
- }
- if(min_index==k&&max_index==i)
- swap(&mas[k],&mas[i]);
- if(min_index!=k&&max_index!=i)
- {
- swap(&mas[k],&mas[max_index]);
- swap(&mas[i],&mas[min_index]);
- }
- k--; //сокращаем границу цикла
- }
- for(i=0;i<n;i++)
- {
- printf("%d ",mas[i]);
- }
- }
Объяснение кода листинга программы
Код выполняет двухстороннюю сортировку выбором. Вот список действий, которые происходят в коде:
- Создается массив
mas
размеромn
со значениями, которые нужно отсортировать. - Определяются переменные
max
,min
,max_index
,min_index
,i
,j
,k
, которые будут использоваться в процессе сортировки. - Переменная
k
инициализируется значениемn-1
, чтобы обеспечить корректное поведение цикла. - В цикле
for
происходит сортировка. На каждой итерации цикла:- Переменные
max
иmin
инициализируются значением первого элемента текущего подмассива. - Переменные
max_index
иmin_index
инициализируются значением индекса первого элемента текущего подмассива. - В цикле
for
внутреннем по отношению к основному циклу происходит поиск максимального и минимального элементов в текущем подмассиве. - Если максимальный и минимальный элементы находятся на одной и той же позиции (то есть подмассив уже отсортирован), код пропускает итерацию.
- Если максимальный элемент находится на последней позиции, а минимальный - на первой, код меняет местами последний и первый элементы.
- Если минимальный элемент находится на последней позиции, а максимальный - на первой, код меняет местами последний и первый элементы.
- Если максимальный и минимальный элементы находятся на одной и той же позиции, и подмассив не отсортирован (то есть максимальный элемент находится перед минимальным), код меняет местами последний и первый элементы.
- Если максимальный и минимальный элементы находятся на разных позициях, и подмассив не отсортирован, код меняет местами последний и первый элементы.
- Если максимальный и минимальный элементы находятся на одной и той же позиции, и подмассив отсортирован, код меняет местами последний и первый элементы.
- Если максимальный и минимальный элементы находятся на разных позициях, и подмассив отсортирован, код меняет местами последний и первый элементы.
- Если максимальный и минимальный элементы находятся на одной и той же позиции, и подмассив не отсортирован, код меняет местами последний и первый элементы.
- Если максимальный и минимальный элементы находятся на разных позициях, и подмассив не отсортирован, код меняет местами последний и первый элементы.
- Если максимальный и минимальный элементы находятся на одной и той же позиции, и подмассив отсортирован, код меняет местами последний и первый элементы.
- Если максимальный и минимальный элементы находятся на разных позициях, и подмассив отсортирован, код меняет местами последний и первый элементы.
- Переменные
- После завершения основного цикла, в цикле
for
происходит вывод отсортированного массива.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д