帮助实现快速排序

时间:2011-08-01 23:14:05

标签: c sorting quicksort

这就是我所拥有的,它不起作用。无法弄清楚原因......问题可能出在quick_sort函数中。

#include <stdio.h>
#include <stdlib.h>

void quick_sort(int * a, int l, int r);
void swap(int * a, int i, int j);

int main(void)
{
  #define N 10
  int a[N], i;
  for (i = 0; i < N; ++i) {
    a[i] = rand();
    printf("%d\n", a[i]);
  }
  quick_sort(a, 0, N - 1);
  for (i = 0; i < N; ++i)
    printf("%d\n", a[i]);
  return 0;
  #undef N
}

void quick_sort(int * a, int l, int r)
{
  int i, j;
  if (l < r) {
    swap(a, rand() % (r - l + 1), r);
    i = l;
    for (j = l; j < r; ++j)
      if (a[j] < a[r]) {
        swap(a, i, j);
        ++i;
      }
    swap(a, i, r);
    quick_sort(a, l, i - 1);
    quick_sort(a, i + 1, r);
  }
}

void swap(int * a, int i, int j)
{
  int k;
  k = a[i];
  a[i] = a[j];
  a[j] = k;
}

1 个答案:

答案 0 :(得分:5)

修正此行:swap(a, rand() % (r - l + 1), r);

应该是:swap(a, l + rand() % (r - l + 1), r);