此函数是否将整数从最小到最大排序?

时间:2016-07-27 01:53:21

标签: 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->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;
      }
   }

我只想知道以下代码是否可以正常排序从最小值到最大值的整数链接列表。

1 个答案:

答案 0 :(得分:0)

不,发布的代码不会将整数从最小值排序到最大值,它完全相反,它会将数组list->value从大到小排序,并在数组list->move上执行相同的排列保持同步。

请注意,此排序实施稳定,但效率低: O的时间复杂度(N 2

要通过增加顺序执行排序,请更改此:

if (list->value[j] > best_value) {

进入这个:

if (list->value[j] < best_value) {

另请注意,您只需交换索引ibest_index的条目,而不是移动数组内容。它会更快,但会打破这种稳定性。