Двухсторонняя сортировка выбором - нужен пример - 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]);
}
}

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

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

  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