C 此函数是否将整数从最小值排序到最大值?
我只是想知道下面的代码是否能够正确地将整数链表从最小值排序到最大值C 此函数是否将整数从最小值排序到最大值?,c,function,sorting,C,Function,Sorting,我只是想知道下面的代码是否能够正确地将整数链表从最小值排序到最大值 void list_sort(list_t * list) { int i, j; int best_index, best_move, best_value; ASSERT(list_is_ok(list)); for (i = 0; i < list->size-1; i++) { best_index = i; best_value = list->
void list_sort(list_t * list) {
int i, j;
int best_index, best_move, best_value;
ASSERT(list_is_ok(list));
for (i = 0; i < list->size-1; i++) {
best_index = i;
best_value = list->value[i];
for (j = i+1; j < list->size; j++) {
if (list->value[j] > best_value) {
best_index = j;
best_value = list->value[j];
}
}
if (best_index != i) {
best_move = list->move[best_index];
ASSERT(best_value==list->value[best_index]);
for (j = best_index; j > i; j--) {
list->move[j] = list->move[j-1];
list->value[j] = list->value[j-1];
}
list->move[i] = best_move;
list->value[i] = best_value;
}
}
void list\u排序(list\t*list){
int i,j;
int最佳索引、最佳移动、最佳值;
断言(list_是ok(list));
对于(i=0;isize-1;i++){
最佳指数=i;
最佳值=列表->值[i];
对于(j=i+1;jsize;j++){
如果(列表->值[j]>最佳值){
最佳指数=j;
最佳值=列表->值[j];
}
}
if(最佳指数!=i){
最佳移动=列表->移动[最佳索引];
断言(最佳值==列表->值[最佳索引]);
对于(j=最佳指数;j>i;j--){
列表->移动[j]=列表->移动[j-1];
列表->值[j]=列表->值[j-1];
}
列表->移动[i]=最佳移动;
列表->值[i]=最佳值;
}
}
我只想知道以下代码是否能正确地将整数链表从最小值排序到最大值。否,发布的代码不会将整数从最小值排序到最大值,它的作用正好相反,它将数组从最大值排序到最小值,并对数组执行相同的排列
list->move
以保持同步
void list_sort(list_t * list) {
int i, j;
int best_index, best_move, best_value;
ASSERT(list_is_ok(list));
for (i = 0; i < list->size-1; i++) {
best_index = i;
best_value = list->value[i];
for (j = i+1; j < list->size; j++) {
if (list->value[j] > best_value) {
best_index = j;
best_value = list->value[j];
}
}
if (best_index != i) {
best_move = list->move[best_index];
ASSERT(best_value==list->value[best_index]);
for (j = best_index; j > i; j--) {
list->move[j] = list->move[j-1];
list->value[j] = list->value[j-1];
}
list->move[i] = best_move;
list->value[i] = best_value;
}
}
请注意,这种排序实现是稳定的,但效率低下:时间复杂度为O(N2)
要按递增顺序执行排序,请更改以下内容:
if (list->value[j] > best_value) {
为此:
if (list->value[j] < best_value) {
if(列表->值[j]
还要注意的是,您不必移动数组内容,只需交换索引
i
和best\u index
处的条目即可。这会更快,但会破坏排序的稳定性。为什么不调用它并亲自查看呢?堆栈溢出不能替代测试和调试。“我的代码有效吗?”对于这个网站来说不是一个合适的问题。也许最好转到“我只是想知道下面的代码是否正确工作”。幸运的是,有一种众所周知的方法可以实现这一点。它叫做“测试”@s952163不,代码审查不适合这个问题。代码审查非常明确地只允许已经工作的代码。因此,它是一个“如何改进”网站,而不是一个“是否工作”网站。