其他分享
首页 > 其他分享> > 快速排序

快速排序

作者:互联网

算法思想:
1.从一个新数列中挑选一个元素称为“基准”pivot。
2.重新排序数列所有元素。比基准值小的摆放在基准元素之前,所有比基准值大的元素摆放在基准之后(相同的数可以摆放到任意一边)。在这个分区退出之后,该基准元素处于数列的中间位置。这个操作叫分区(partition)操作。
3.递归地(recursive)把小于基准元素的子序列和大于基准元素的子序列进行上述操作。

代码:

int parition(int a[],int low,int high){
     int pivot=a[low];//选取基准元素
     while(low<high){
            while(low<high&&a[high]>=pivot) --high;
            a[low]=a[high];
            while(low<high&&a[low]<=pivot) ++low;
            a[hig]=a[low];
    }
    a[low]=pivot;
    return low;
}

void QuickSort(int a[],int low,int high){
     if (low<high){
        int pivot=parition(a,low,high):
        QuickSort(a,low,pivot-1);
        QuickSort(a,pivot+1,high);
}

时间复杂度为O(nlogn)~O(n2)。

如何a[]有序时间复杂度为最高,因此对于a[]可以先打散一个。

代码:
int tot=0;全局变量
void rebuild(int a[],int l,int r,int b[]){
      if (l==r) return ;
      int m=(l+r)/2;
      b[tot++]=a[m]:
     rebuild(a,l,m);
     rebuild(a,m+1,r);
}

练习:

https://www.luogu.com.cn/problem/P1177

  
      

 

 

 

 

 

 

 

 

 

 

  

 

标签:int,基准,元素,high,low,pivot,排序,快速
来源: https://www.cnblogs.com/smghj/p/15946897.html