快速排序

来源:互联网 发布:wifi网络质量不佳 编辑:程序博客网 时间:2024/06/01 15:45

基本思想
1)任取待排序序列中的某个数据元素(例如:第一个元素),作为基准,按照该元素的关键字大小将整个序列划分为左右两个子序列:

  • 左侧子序列中所有元素都小于或等于基准元素
  • 右侧子序列中所有元素都大于基准元素
  • 基准元素排在这两个子序列中间

2)分别对这两个子序列重复实施上述方法,直到所有的对象都排在相应位置上为止

int partition(int array[],int low,int high)  O(n*logn){    int pv = array[low];    while(low < high)    {        while((low<high)&&(array[high]>=pv))        {            high--;        }        swap(array,low,high);        while((low < high)&&(array[low]<= pv))        {            low++;        }        swap(array,low,high);    }    return low;}void QSort(int array[],int low,int high){    if(low < high)    {        int pivot = partition(array,low,high);        QSort(array,low,pivot-1);        QSort(array,pivot+1,high);     }}void QuickSort(int array[],int len){    QSort(array,o,len-1);}