У меня есть задание Мне нужна небольшая помощь. Нам нужно выбрать два алгоритма сортировки в C и сравнить их эффективность. Я написал следующий код, но я не уверен, что сравнение правильное. Я думаю, что свопы в порядке. Я достаточно новичок в этом, поэтому будьте осторожны, если увидите очевидные недостатки.Считать сравнения и свопы в простой программе сортировки
#include <stdlib.h>
#include <time.h>
#define MAX 20
int main(void)
{
//Declare variables
int i,x,y,temp;
int comparsioncounter=0;
int swapcounter=0;
//Assign values to our array. I didn’t use random numbers so we could compare the two methods
int array[MAX]= {3,1,5,8,7,13,17,34,22,31,28,2,17,44,23,67,32,9,12,30};
//start clock to time execution time
clock_t start, end;
start = clock();
printf("Unsorted array\n");
//print unsorted array
for(i=0; i<MAX;i++){
printf("%d ",array[i]);
}
printf("\n");
//Our sort algorithm
for (x=0; x<MAX; x++){
for(i=0;i<MAX-1;i++){
//counter to keep track of how many times the comparison loops
comparsioncounter++;
if(array[i]>array[i+1])
{
temp=array[i];
array[i]=array[i+1];
array[i+1]=temp;
//Counter to keep track of how many times the comparison loops
swapcounter++;
}
}
}
//print sorted array
printf("\nSorted array\n");
for(i=0; i<MAX;i++){
printf("%d ",array[i]);
}
//Print out number of comparsions and swaps
printf("\n\nNumber of comparsions is %d\n", comparsioncounter);
printf("Number of swaps is %d", swapcounter);
end = clock();
//print out execution time
printf("\nTime taken in seconds: %.5lf\n", ((double)(end - start))/CLOCKS_PER_SEC);
return 0;
}
Для очень маленьких наборов входов выполните вычисления * на бумаге *, а затем сравните с тем, что вы получаете в своей программе. Если оба они одинаковы, вы, вероятно, правы, иначе что-то не так. –
'x <20; .. i <19': 20 * 19 =' 380' – BLUEPIXY
Если я уменьшу массив до размера 4. Свопы правильно подсчитываются, но сравнения возвращаются 16. Я не думаю, что это правильно – niallo27