Help implementing quick sort [closed]

我怕爱的太早我们不能终老 提交于 2019-12-11 07:03:13

问题


This is what I have and it doesn't work. Can't figure out why... The problem is probably in the quick_sort function.

#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:


Fix this line: swap(a, rand() % (r - l + 1), r);

Should be: swap(a, l + rand() % (r - l + 1), r);



来源:https://stackoverflow.com/questions/6905554/help-implementing-quick-sort

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!