快速排序

注意:快排是不稳定算法

无论是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];

两个都是包含等于的==,非常重要的一点

原文地址:https://www.cnblogs.com/kkshaq/p/4518033.html