Quicksort无法正确对长值数组进行排序

时间:2019-04-07 22:39:40

标签: c sorting types quicksort long-integer

我正在尝试实现一种快速排序算法来对long * array定义的数组进行排序。它对大多数值进行排序,但不是全部。我觉得所使用的值的范围一定存在问题,但我无法确定。

void swap(long *a, long *b)
{
    long temp = *a;
    *a = *b;
    *b = temp;
}

long partition(long * arr, long low, long high) {
  long pivot = arr[high];
  long i = low;
  for (long j = low; j < (high - 1); j++) {
    if (arr[j] < pivot) {
      swap(&arr[i], &arr[j]);
      i++;
    }
  }
  swap(&arr[i], &arr[high]);
  return i;
}

void quickSort(long * arr, long low, long high) {
  if (low < high) {
    long p = partition(arr, low, high);
    quickSort(arr, low, p - 1);
    quickSort(arr, p + 1, high);
  }
}

我用quickSort呼叫quickSort(array, 0, size - 1)。这是对15个长值的随机数组进行排序时的输出:

-482641087233232037
-3864131317804163752
-3090751678944217314
-2010933995968724040
1597984395262413786
2533582178445507721
2959320811908600883
5433974314367983925
-8110790053026736838
4549802945312878540
2821133411822490835
-2345840024589719123
606083409223366793
-4897849740314804917
-8410623358012228580

Starting quicksort.

-8410623358012228580
-3090751678944217314
-3864131317804163752
-2345840024589719123
-2010933995968724040
-8110790053026736838
-482641087233232037
606083409223366793
1597984395262413786
2821133411822490835
2533582178445507721
2959320811908600883
4549802945312878540
5433974314367983925
-4897849740314804917

0 个答案:

没有答案