请高手帮小弟我看看这个快排哪里出错了
请高手帮我看看这个快排哪里出错了?
不知道哪一步出错了,求解答
------解决方案--------------------
高位与低位交换时,需要加if(low<high) 判断
- C/C++ code
#include<iostream> using namespace std; int Partition(int a[],int low,int high){ int pivot=a[low];//第0个位置记录枢轴值 while (low < high) { while (low<high && pivot<a[high]) { --high; //将比枢轴小的记录移到低端 } a[low]=a[high]; low++; while (low<high &&pivot>a[low]) { low++; } a[high]=a[low]; high--; } if(low>=high) { a[low]=pivot; cout<<"返回的low值是"<<low<<endl; for(int i=0;i<low;i++){ cout<<a[i]<<" ";} cout<<'\n'; return low; } else { a[high]=pivot; cout<<high<<endl;; return high; } } void QuickSort(int a[],int low,int high) { int pivotLocation;//记录枢轴位置 if (low<high)//保证区间长度大于1 { pivotLocation=Partition(a,low,high);//划分区间,并得到枢轴位置 QuickSort(a,low,pivotLocation-1);//对枢轴左区间进行快排 QuickSort(a,pivotLocation+1,high);//对枢轴右区间进行快排 } } int main() { int b[10]={6,7,4,1,52,33,2,1,4,1}; Partition(b,0,9); for(int i=0;i<10;i++){ cout<<b[i]<<" "; } cout<<endl; QuickSort(b,0,9); for(int i=0;i<10;i++){ cout<<b[i]<<" "; } return 0; }
不知道哪一步出错了,求解答
------解决方案--------------------
高位与低位交换时,需要加if(low<high) 判断
- C/C++ code
#include<iostream> using namespace std; int Partition(int a[],int low,int high){ int pivot=a[low];//第0个位置记录枢轴值 while (low < high) { while (low<high && pivot<a[high]) { --high; //将比枢轴小的记录移到低端 } if(low<high) a[low++]=a[high];//这里要加 low<high条件 因为可能有low==high的情况出现 while (low<high &&pivot>=a[low]) { low++; } if(low<high) a[high--]=a[low]; } if(low>=high) { a[low]=pivot; // cout<<"返回的low值是"<<low<<endl; // for(int i=0;i<low;i++){ // cout<<a[i]<<" ";} // cout<<'\n'; return low; } else { a[high]=pivot; // cout<<high<<endl;; return high; } } void QuickSort(int a[],int low,int high) { int pivotLocation;//记录枢轴位置 if (low<high)//保证区间长度大于1 { pivotLocation=Partition(a,low,high);//划分区间,并得到枢轴位置 QuickSort(a,low,pivotLocation-1);//对枢轴左区间进行快排 QuickSort(a,pivotLocation+1,high);//对枢轴右区间进行快排 } } int main() { int b[10]={6,7,4,1,52,33,2,1,4,1}; Partition(b,0,9); for(int i=0;i<10;i++){ cout<<b[i]<<" "; } cout<<endl; QuickSort(b,0,9); for(int i=0;i<10;i++){ cout<<b[i]<<" "; } return 0; }