Сортировка работает неправильно - C (СИ)
Формулировка задачи:
#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+i;
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;
}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],",");
}Решение задачи: «Сортировка работает неправильно»
textual
Листинг программы
void my_swap(long *a, long *b){
int temp = *a; *a = *b; *b = temp;
}
void bubbleSort(long list[], int size)
{
int i, j;
for(i = 1; i < size; i++){
for(j = size - 1; j >= i; j--)
if(list[j] < list[j - 1])
my_swap(&list[j], &list[j-1]);
}
}
Объяснение кода листинга программы
- В первой функции
my_swapпроисходит обмен значениями между двумя указателями типаlong. - Во второй функции
bubbleSortпроисходит сортировка массиваlistс помощью алгоритма сортировки пузырьком. - Внутри цикла сортировки пузырьком (который выполняется
size - 1итераций) происходит сравнение элементовlist[j]иlist[j-1]. Если первый больше второго, то они меняются местами с помощью функцииmy_swap. - Итерация внешнего цикла начинается с
i = 1и продолжается до тех пор, пока не достигнетsize. - Итерация внутреннего цикла начинается с
j = size - 1и выполняется до тех пор, пока не достигнетi(поскольку на каждой итерации наибольший элементвсплываетв конец массива). - После завершения сортировки массив
listбудет отсортирован в порядке возрастания.