Двухсторонняя сортировка выбором - нужен пример - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите написать или найти код этой сортировки( она улучшает обычную сортировку выбором. кроме максимального элемента в неотсортированном подмассиве также находит и минимальный. Максимум при этом перемещать в конец подмассива, а минимум — в начало.

Решение задачи: «Двухсторонняя сортировка выбором - нужен пример»

textual
Листинг программы
  1. #include <stdio.h>
  2. #define n 10
  3.  
  4. void swap(int *a,int *b)
  5. {
  6.     int tmp;
  7.     if(*a==*b)   //отказываемся от замены одинаковых
  8.         return;
  9.     tmp=*a;
  10.     *a=*b;
  11.     *b=tmp;
  12.     printf("%d <-> %d\n",*a,*b);
  13. }
  14.  
  15. main()
  16. {
  17.   int mas[n]={9,5,1,3,6,7,4,8,2,0};
  18.   int max,min,max_index,min_index,i,j,k;
  19.  
  20.   k=n-1;
  21.   for(i=0;i<=k;i++)
  22.   {
  23.       max=min=mas[i];
  24.       max_index=min_index=i;
  25.         for(j=i+1;j<=k;j++)
  26.         {
  27.             if(mas[j]>max)
  28.             {
  29.                 max=mas[j];
  30.                 max_index=j;
  31.             }
  32.             if(mas[j]<min)
  33.             {
  34.                 min=mas[j];
  35.                 min_index=j;
  36.             }
  37.         }
  38.     if(max_index==i&&min_index!=k)   //куча if-ов для обработки пограничных значений
  39.     {
  40.         swap(&mas[k],&mas[max_index]);
  41.         swap(&mas[i],&mas[min_index]);
  42.     }
  43.     if(min_index==k&&max_index!=i)
  44.     {
  45.         swap(&mas[i],&mas[min_index]);
  46.         swap(&mas[k],&mas[max_index]);
  47.     }
  48.     if(min_index==k&&max_index==i)
  49.         swap(&mas[k],&mas[i]);
  50.     if(min_index!=k&&max_index!=i)
  51.      {
  52.         swap(&mas[k],&mas[max_index]);
  53.         swap(&mas[i],&mas[min_index]);
  54.      }
  55.     k--; //сокращаем границу цикла
  56.  
  57.   }
  58. for(i=0;i<n;i++)
  59. {
  60.     printf("%d ",mas[i]);
  61. }
  62. }

Объяснение кода листинга программы

Код выполняет двухстороннюю сортировку выбором. Вот список действий, которые происходят в коде:

  1. Создается массив mas размером n со значениями, которые нужно отсортировать.
  2. Определяются переменные max, min, max_index, min_index, i, j, k, которые будут использоваться в процессе сортировки.
  3. Переменная k инициализируется значением n-1, чтобы обеспечить корректное поведение цикла.
  4. В цикле for происходит сортировка. На каждой итерации цикла:
    • Переменные max и min инициализируются значением первого элемента текущего подмассива.
    • Переменные max_index и min_index инициализируются значением индекса первого элемента текущего подмассива.
    • В цикле for внутреннем по отношению к основному циклу происходит поиск максимального и минимального элементов в текущем подмассиве.
    • Если максимальный и минимальный элементы находятся на одной и той же позиции (то есть подмассив уже отсортирован), код пропускает итерацию.
    • Если максимальный элемент находится на последней позиции, а минимальный - на первой, код меняет местами последний и первый элементы.
    • Если минимальный элемент находится на последней позиции, а максимальный - на первой, код меняет местами последний и первый элементы.
    • Если максимальный и минимальный элементы находятся на одной и той же позиции, и подмассив не отсортирован (то есть максимальный элемент находится перед минимальным), код меняет местами последний и первый элементы.
    • Если максимальный и минимальный элементы находятся на разных позициях, и подмассив не отсортирован, код меняет местами последний и первый элементы.
    • Если максимальный и минимальный элементы находятся на одной и той же позиции, и подмассив отсортирован, код меняет местами последний и первый элементы.
    • Если максимальный и минимальный элементы находятся на разных позициях, и подмассив отсортирован, код меняет местами последний и первый элементы.
    • Если максимальный и минимальный элементы находятся на одной и той же позиции, и подмассив не отсортирован, код меняет местами последний и первый элементы.
    • Если максимальный и минимальный элементы находятся на разных позициях, и подмассив не отсортирован, код меняет местами последний и первый элементы.
    • Если максимальный и минимальный элементы находятся на одной и той же позиции, и подмассив отсортирован, код меняет местами последний и первый элементы.
    • Если максимальный и минимальный элементы находятся на разных позициях, и подмассив отсортирован, код меняет местами последний и первый элементы.
  5. После завершения основного цикла, в цикле for происходит вывод отсортированного массива.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут