快速排序
Posted boht
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。
三路快速排序:思想就是将一块数据分为三个部分,分别为<v,=v,>v三部分。5个下标值。l:为左下标值 r:为右下标值 lt:为<v的边界下标 gt:为>v的边界下标。i:为检索值
1:当arr[i]>v时,将arr[i]的值和arr[gt-1]的值进行互换,此时i处的值同样的还没有被处理过。gt=gt-1
2:当arr[i]<v时,将arr[i]的值和arr[lt+1]的值进行互换。此时lt=lt+1;i=i+1;
3:当arr[i]=v时,不做任何处理,直接将i=i+1;
template <typename T> void __qiuckSort3(T arr[],int l,int r) { if(r-l<=15) { insertinonSort(arr, l, r); return; } // partition swap(arr[l],arr[rand()%(r-l+1)+l]); T v=arr[l]; int lt=l; //arr[l+1..lt)<v int gt=r+1; //arr(gt..r]>v int i=l+1; //arr[lt+1..i) == v while(i<gt) { if(arr[i]<v && i<=r ){ swap(arr[i],arr[lt+1]); i++; lt++; } else if(arr[i]>v) { swap(arr[i],arr[gt-1]); gt--; } else { i++; } } swap(arr[l],arr[lt]); __qiuckSort3(arr,l,lt-1); __qiuckSort3(arr,gt,r); } template <typename T> void qiuckSort3(T arr[],int n) { srand(time(NULL)); __qiuckSort3(arr,0,n-1); }
以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章