void Qsort(int arr[], int low, int high)//从角标为low的元素到角标为high的元素进行从大到小排序
{
if(high<=low) return;
int i=low;
int j=high+1;
int key=arr[low];//先把第一个元素当作比较基数
while(true)
{
while(arr[++i]>arr[low])//往右寻找比基准小的数
if(i==high)
break;
while(arr[--j]<arr[low])//往左边寻找比基准大的数,--j就是j=high+1的原因,非常关键
if(j==low)
break;
if(i>=j) break; //判断条件中的=很关键
//交换两个元素
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
//交换基准与arr[j]的值
int temp=arr[low];
arr[low]=arr[j];
arr[j]=temp;
Qsort(arr,low,j-1);//递归调用,对基准数前面的数进行相同方法的排序
Qsort(arr,j+1,high);//对基准数后面的数进行相同方法的排序
}
快速排序(C++实现)
最新推荐文章于 2024-06-22 23:42:38 发布