Ошибка сортировки вставками - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{ clrscr();
textcolor(14);
unsigned long iran;
unsigned long rand_a, rand_c, rand_m;
unsigned long jran;
int i, j,n,tmp;
unsigned long a[6][6];
rand_m = 233280;
rand_a = 9301;
rand_c = 49297;
for (i = 0; i < 6; i++)
{
for (j = 0; j < 6; j++)
{
iran = (iran * rand_a + rand_c) % rand_m;
jran = (65157 * iran) % rand_m;
a[i][j] = jran;
printf("%7lu", a[i][j]) ;
}
}
printf ("\n\n\n odnovumirnuj nevporjadkovanuj masiv:\n\n");
int b[36];
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
n=6*i+i;
b[n]=a[i][j];
printf("%d,",b[n]);
}
printf("\n\n\n odnovumirnuj vporjadkovanuj masiv:\n\n");
for ( i=0; i < 36; i++){
if (b[i] > b [i + 1] ) {
tmp = b[i];
b[i] =b[i+1];
b[i+1]=tmp;
}
}
for(i=0;i<36;i++)
printf("|%d|",b[i]);
getch();
return 0;
}
for ( i=0; i < 36; i++){
* * if (b[i] > b [i + 1] ) {
* * * * tmp = b[i];
* * * * b[i] =b[i+1];
* * * * * * b[i+1]=tmp;
* * * * * *}
* * * * }
*for(i=0;i<36;i++)
* *printf("|%d|",b[i]);
* * *getch();
return 0;
}
ой и не вставками а пузырьком
Решение задачи: «Ошибка сортировки вставками»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int iran;
int rand_a,rand_c,rand_m;
int jran;
int i,j,n,x,r;
int a[4][5],b[20];
rand_m=714025;
rand_a=4096;
rand_c=150889;
for (i=0;i<4;i++)
{
printf("\n");
for (j=0;j<5;j++)
{iran=(iran*rand_a+rand_c)%rand_m;
jran=-100+((300)*iran)%rand_m;
a[i][j]=jran;
printf("%7d,",a[i][j],",");
}
}
printf ("\n\n\n odnovumirnuj nevporjadkovanuj masiv:\n\n");
for(i=0;i<4;i++)
for(j=0;j<5;j++)
{
n=4*i+j;
b[n]=a[i][j];
printf("%d,",b[n]);
}
printf("\n\n\n odnovumirnuj vporjadkovanuj masiv:\n\n");
for ( i=0; i <20; i++)
{
x = b[i];
for ( j=i-1;j>=0 && b[j] > x; j--)
b[j+1] = b[j];
b[j+1] = x;
printf("%6d,",b[n],",");
}
getch();
return 0;
}
Объяснение кода листинга программы
В этом коде выполняется сортировка массива вставками.
- В начале кода определяются переменные и массивы:
iran- используется в качестве временной переменной в цикле сортировки;rand_m,rand_a,rand_c- используются для генерации случайных чисел при заполнении массиваa;a[i][j]- массив 4х5, заполняемый случайными числами;b[n]- массив 20 элементов, в который будут копироваться числа изaдля сортировки;n=4*i+j- используется для индексации массиваb.
- Затем происходит заполнение массива
aслучайными числами и его вывод на экран. - Далее, происходит сортировка массива
bвставками. Для каждого элементаxв массивеbищутся позиции, куда его можно вставить, чтобы сохранить возрастающий порядок. Если таких позиций нет, элемент считается уже отсортированным и не двигается. - В конце сортировки, отсортированный массив
bвыводится на экран. - Код завершается вызовом функции
getch(), которая ожидает нажатия клавиши, и возвращает управление операционной системе.