注意:快排是不稳定算法
无论是low,还是high,都是a[low]<=pivot ,a[high]>=pivot,等于号是包含的,也就是出现元素与pivot相等的时候,是不移动这个相等的元素的
#include<iostream> using namespace std; int Partition(int*arr,int low,int high); void quick_sort(int*arr,int low,int high){ if(low<high){ int mid=Partition(arr,low,high); quick_sort(arr,low,mid-1); quick_sort(arr,mid+1,high); } } int Partition(int*arr,int low,int high){ int pivot=arr[low]; while(low<high){ while(arr[high]>=pivot&&high>low) // high--; arr[low]=arr[high]; while(arr[low]<=pivot&&high>low) // low++; arr[high]=arr[low]; } arr[low]=pivot; return low; } int main(){ int a[]={1,34,23,2,7,4,9}; quick_sort(a,0,6); }
while(arr[high]>=pivot&&high>low)
high--;
arr[low]=arr[high];
while(arr[low]<=pivot&&high>low)
low++;
arr[high]=arr[low];
两个都是包含等于的==,非常重要的一点