首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请高手帮小弟我看看这个快排哪里出错了

2012-06-12 
请高手帮我看看这个快排哪里出错了?C/C++ code#includeiostreamusing namespace stdint Partition(int

请高手帮我看看这个快排哪里出错了?

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;} 

热点排行