快排又称为快速排序算法
快熟排序主要思想为:递归而分,重于分而治,而简与合。
治:
int partition(int A[],int st,int ed){
int key = A[st];//把第一个元素作为支点
int j = st;//j一直指向小于等于key一类的尾元素
for(int i = st + 1; i <= ed;i++){//扫描剩下元素,实现分成两类,一类小于等于key,一类大于等于key
if(A[i] <= key){
j++;
int temp = A[j];
A[j] = A[i];
A[i] = temp;
}
}
int temp = A[j];
A[j] = A[st];
A[st] = temp;
return j;
}
分:
如何分画一个递归树就一目明了,我们可以知道在递归树中,每一个结点,都要实行“治”。所以有
void QuickSort(int A[],int st,int ed){
if(st < ed){
int mid = partition(A,st,ed);
QuickSort(A,st,mid - 1);//两个方向分别搜素所有结点,完成所有治理,完成排序。
QuickSort(A,mid + 1,ed);
}
}
By ACReaper
2013 03 23