s6 快速排序
一:解题思路
Time:O(n*log(n)),Space:O(1) 是一种不稳定的排序方法
二:完整代码示例 (C++版和Java版)
C++:
template <typename T>
static void Swap(T& a,T& b)
{
T c(a);
a=b;
b=c;
}
template <typename T>
static int partition(T array[],int begin,int end,bool min2max=true)
{
int pivot=array[begin];
while(begin<end)
{
while((begin<end) && (min2max?(array[end]>pivot):(array[end]<pivot))) end--;
Swap(array[begin],array[end]);
while((begin<end)&& (min2max?(array[begin]<=pivot):(array[begin]>=pivot))) begin++;
Swap(array[begin],array[end]);
}
return begin;
}
template <typename T>
static void Quick(T array[],int begin,int end,bool min2max=true)
{
if(begin>=end) return;
int pivot=partition(array,begin,end,min2max);
Quick(array,begin,pivot-1,min2max);
Quick(array,pivot+1,end,min2max);
}
template <typename T>
static void Quick(T array[],int len,bool min2max=true)
{
if(len==0) return;
Quick(array,0,len-1,min2max);
}
Java:
private void Swap(int[] array,int i,int j) { int temp=array[i]; array[i]=array[j]; array[j]=temp; } private int partition(int[] array,int begin,int end) { int pivot=array[begin]; while (begin<end) { while(begin<end && array[end]>pivot) end--; Swap(array,begin,end); while(begin<end && array[begin]<=pivot) begin++; Swap(array,begin,end); } return begin; } private void Quick(int[] array,int begin,int end) { if(begin>=end) return; int pivot=partition(array,begin,end); Quick(array,begin,pivot-1); Quick(array,pivot+1,end); } public void Quick(int[] array) { if(array==null || array.length==0) return; Quick(array,0,array.length-1); }

浙公网安备 33010602011771号