Сортировка вставка - C (СИ)

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

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

Задание:Дан одномерный массив А[10]. Выполнить сортировку четных элементов слева от минимального по возрастанию ,а сортировку всех элементов справа от минимального-по убыванию.(на языке Си) Вот программа в которой нужно изменить сортировку выборов,на сортировку вставка,подскажите пожалуйста как именно и где нужно изменить код???!
# include <stdio.h>
#define N 10
int main()
{
    int m[N];
    int pos=0, i;
    int tmp, ccc, b;
    int min;
    for(i=0; i<N; i++) {
        printf("Print mas[%d]:", i);
        scanf("%d", &m[i]);
    }
    //  int min=m[0], c, t=0;
     min=m[0];
     for(i=1;i<N;i++) {
          if( m[i]<min ) {
               min = m[i];
                pos = i;
                  }
    }
    printf("min = %d\npos = %d",min,pos);
     for ( i=1;i<pos; i+=2) {
         tmp = m[i];
            ccc=i;
            for ( b=i+2;b<pos;b+=2) {
                 if (m[b]<tmp ) {// вместо (m[i]%2==0)
                      ccc=b;
                    tmp=m[b];
                }
            }
            if (ccc != i) {
                m[ccc]=m[i];
                 m[ccc]=m[i];
                m[i]=tmp;
            }
    }
 
    for (i=pos+1;i<N;i++) {
        tmp=m[i];
        ccc=i;
        for (b=i+1;b<10;b++) {
            if (m[b]>tmp) {
                ccc=b;
                tmp=m[b];
            }
        }
        if (ccc != i) { // если было выбрано
            m[ccc]=m[i];
            m[i]=tmp;
        }
    }
// вывод
    for(i=0;i<N;i++) {
        printf("\n mas [%d]=%d",i,m[i]);
    }
}
А вот это простая программка с сортировкой вставкой
# include <stdio.h>
 
int main()
{
 int m[5];
 int t, pos, i, j;
 
 for(i=0; i<5; i++)
 {
  printf("Print mas[%d]:", i);
  scanf("%d", &m[i]);
 
 }
 
 for(i=0; i<5; i++)
 {
  t=m[i];
  j=i-1;
  while(j>=0 && m[j]>t)
  {
    m[j+1]=m[j];
    m[j]=t;
    j--;
  }
 }

 for(i=0; i<5; i++)
 {
  printf(">>mas[%d]=%d\n", i, m[i]);
 
 }

 return 0;
 
}

Решение задачи: «Сортировка вставка»

textual
Листинг программы
int main()
{
int m[5];
int t, pos, i, j;
 
for(i=0; i<5; i++)
{
printf("Print mas[%d]:", i);
scanf("%d", &m[i]);
 
}
 
for(i=0; i<5; i++)
{
t=m[i];
j=i-1;
while(j>=0 && m[j]>t)
{
m[j+1]=m[j];
m[j]=t;
j--;
}
}
 
for(i=0; i<5; i++)
{
printf(">>mas[%d]=%d\n", i, m[i]);
 
}
return 0;
}

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

В этом коде представлена сортировка массива методом вставки.

  1. Переменные:
    • m[5] - массив целых чисел, размером 5;
    • t - временная переменная;
    • pos - позиция элемента в массиве;
    • i - счётчик для цикла;
    • j - счётчик для цикла;
  2. Цикл, в котором пользователь вводит значения элементов массива с помощью функции scanf().
  3. Цикл, в котором происходит сортировка массива методом вставки.
  4. Алгоритм сортировки:
    • В каждой итерации, элемент с текущим индексом (i) сравнивается со всеми элементами, начиная с предыдущего (j).
    • Если текущий элемент (t) меньше или равен предыдущему элементу (m[j]), то они меняются местами.
    • Если текущий элемент больше предыдущего, то он вставляется в позицию j+1.
    • После каждой итерации, счётчик j уменьшается на единицу.
  5. Вывод отсортированного массива с помощью цикла for и функции printf().
  6. Результат: отсортированный массив m[].

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


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

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

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