我只想知道以下代码是否可以正常排序从最小值到最大值的整数链接列表。
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;
}
}
我只想知道以下代码是否可以正常排序从最小值到最大值的整数链接列表。
答案 0 :(得分:0)
不,发布的代码不会将整数从最小值排序到最大值,它完全相反,它会将数组list->value
从大到小排序,并在数组list->move
上执行相同的排列保持同步。
请注意,此排序实施稳定,但效率低: O的时间复杂度(N 2 )
要通过增加顺序执行排序,请更改此:
if (list->value[j] > best_value) {
进入这个:
if (list->value[j] < best_value) {
另请注意,您只需交换索引i
和best_index
的条目,而不是移动数组内容。它会更快,但会打破这种稳定性。