|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
自己写了一个C++的快排,有的时候程序能够正常执行,排序正确。有的时候程序不能执行。编译都没有问题,不能执行时返回的是, Process returned -1073741571(0xc00000FD)。请求大神帮忙看看是不是程序写得哪有问题。
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- using namespace std;
- void swap(int* arr, int a, int b)
- {
- int temp = arr[a];
- arr[a] = arr[b];
- arr[b] = temp;
- }
- int partition(int* arr, int l, int r)
- {
- int less = l - 1;
- int more = r;
- while(l < more)
- {
- if(arr[l] <= arr[r])
- swap(arr, ++less, l++);
- else
- swap(arr, --more, l);
- }
- swap(arr, less+1, r);
- int j = less + 1;
- return j;
- }
- void quickSort(int *arr, int l, int r)
- {
- if(r - l < 1)
- return;
- if(l < r) //递归的条件很重要
- {
- srand(int (time(0)));
- swap(arr, l+int(rand()%10*0.1*(r-l+1)), r);
- int p = partition(arr, l, r);
- quickSort(arr, l, p);
- quickSort(arr, p+1, r);
- }
- }
- int main()
- {
- int array[] = {1,4,6,8,2,3,5};
- quickSort(array, 0, 6);
- for(int i = 0; i < 7; i++)
- cout << array[i] <<" ";
- cout <<endl;
- return 0;
- }
复制代码
你的问题是快排根本就写错了。快排的轴值分割后是不参与二次排序的。而你的代码 - quickSort(arr, l, p);
- quickSort(arr, p+1, r);
复制代码
把轴值也拉进去参与二次排序,
那么轴值刚好就是最大的值呢?那么你此时
p==r, 就成了 ,
那你这根本就是个死循环了
|
|