【发布时间】:2021-05-13 22:40:25
【问题描述】:
我正在尝试在 c 中实现选择排序算法。我不知道这是否是一个正确的实现,以及为什么我的算法比冒泡排序快得多。因此,我想问您是否可以告诉我是否正确以及我必须做出的任何改进。
main(){
srand(time(NULL));
system("color b");
int A[NUM],i;
for(i=0;i<NUM;i++){
A[i] = rand()%30000;
}
displayArray(A);
SelectionSort(A);
displayArray(A);
system("pause");
}
void displayArray(int * A){
int i;
for(i=0;i<NUM;i++){
printf("%6d ", A[i]);
}
printf("\n");
}
void SelectionSort(int * A){
int i,j,k, pos;
for(i=0;i<NUM;i++){
k = A[i];
for(j=i+1;j<NUM;j++){
if(k >= A[j]){
pos = j;
k = A[j];
}
}
A[pos] = A[i];
A[i] = k;
}
}
【问题讨论】:
-
似乎大部分都具有正确的结构,输出是否符合预期?
-
可能属于codereview
-
displayArray()(和SelectionSort())通常将数组的大小作为参数,而不是使用defined(或全局)值...void displayArray(int *A, size_t n); -
回复@mousetail,输出如预期。
-
O(n^2)是渐近时间复杂度 - 不要认为这意味着两个算法都是O(n^2)将在相同的输入上同时运行。
标签: arrays c sorting integer selection-sort