Сортировка вставками - C (СИ) (77587)
Формулировка задачи:
Сортировка вставками массивов из 3-х элементов
Не до конца сортирует
int tmp[3],pos,b=0;
for(int i=1;i<(int)*res;i++)
{
for(int l=0;l<3;l++)
{
tmp[l]=sort[i][l];
}
if(sort[i][b]==sort[(i-1)][b])
{
b++;
i--;
}
else
{
for(pos=i-1;pos>=0 && sort[pos][b]>tmp[b];pos--)
{
for (int l=0;l<3;l++)
{
sort[(pos+1)][l]=sort[pos][l];
}
}
for (int l=0;l<3;l++)
{
sort[(pos+1)][l]=tmp[l];
}
b=0;
}
}
for (int j=0;j<(int)*res;j++)
{
for (int q=0;q<3;q++)
{
fprintf (fp,"%d ",sort[j][q]);
}
}Решение задачи: «Сортировка вставками»
textual
Листинг программы
#include "stdio.h"
int main()
{
int a[] = {24,4,2};
int i, j, tmp;
for (i = 1; i < 3; ++i) // цикл проходов, i - номер прохода
{
tmp = a[i];
for (j = i - 1; j >= 0 && a[j] > tmp; --j) // поиск места элемента в готовой последовательности
a[j + 1] = a[j]; // сдвигаем элемент направо, пока не дошли
a[j + 1] = tmp; // место найдено, вставить элемент
}
for (int q = 0; q < 3; q++)
{
printf ("%d ",a[q]);
}
getchar();
getchar();
return 0;
}
Объяснение кода листинга программы
В этом коде реализуется алгоритм сортировки вставками.
- Создается массив a с тремя элементами, которые нужно отсортировать.
- Задаются начальные значения переменных i, j, tmp.
- Цикл for запускается три раза (по количеству элементов в массиве).
- В каждой итерации цикла, текущий элемент массива (tmp) вставляется в отсортированную до этого момента последовательность.
- Для нахождения места, куда нужно вставить текущий элемент, используется вложенный цикл for, который сдвигает элементы правее, пока не найдет элемент, который больше текущего.
- После нахождения места, элемент вставляется туда.
- После завершения циклов выводится отсортированный массив. Код работает корректно, но его можно оптимизировать, добавив проверку на уже отсортированный массив, чтобы избежать лишних операций.