Сортировка вставка - 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;
}
Объяснение кода листинга программы
В этом коде представлена сортировка массива методом вставки.
- Переменные:
m[5]- массив целых чисел, размером 5;t- временная переменная;pos- позиция элемента в массиве;i- счётчик для цикла;j- счётчик для цикла;
- Цикл, в котором пользователь вводит значения элементов массива с помощью функции
scanf(). - Цикл, в котором происходит сортировка массива методом вставки.
- Алгоритм сортировки:
- В каждой итерации, элемент с текущим индексом (
i) сравнивается со всеми элементами, начиная с предыдущего (j). - Если текущий элемент (
t) меньше или равен предыдущему элементу (m[j]), то они меняются местами. - Если текущий элемент больше предыдущего, то он вставляется в позицию
j+1. - После каждой итерации, счётчик
jуменьшается на единицу.
- В каждой итерации, элемент с текущим индексом (
- Вывод отсортированного массива с помощью цикла
forи функцииprintf(). - Результат: отсортированный массив
m[].