史上思路最清晰的快速排序C++
阿新 • • 發佈:2018-11-24
template<class Type> int partition(SqList<Type>& List,int low,int high) { ElementType<Type>elem=List.elem[low];//以陣列的第一個數作為基準數 Type pivotkey=elem.key;//基準數賦值 int i=low,j=high; while(i<j)//大迴圈控制搜尋結束條件,i>=j時搜尋結束 { while(i<j&&elem[j]>=pivotkey)j--;//當從右邊往左搜尋時,找第一個小於基準數的數 if(i<j){elem[i]=elem[j];i++;}//找到了,將該數賦值到i所在的位置,因為i是從左往右的。 while(i<j&&elem[i]<=pivotkey)i++; if(i<j){elem[j]=elem[i];j++} } List.elem[j]=elem;//最後將基準數賦值到中間位置,也就是大小分界線位置 return j;//返回分界線位置 }
快排的一次排序結果。
template<class Type>void Quicksort(SqList<Type>& List,int low,int high)
{
if(low<high)
{
int pivot=partition(List,low,high);
Quicksort(List,low,pivot-1);
Quicksort(List,pivot+1,high);
}
}
感覺這個版本的排序思路清晰,以後遇到類似的就用此版本。