#include "stdio.h"
//最朴素的快速排序,使用的是分治的策略
//循环不变式为:下标index在[q,i]时,有A[index] <= pivot,下标index在[i+1,j]时,有A[index] > pivot,下标index在[j+1,r-1],A[x]还没有和pivot比较。
int PARTITION (int *A,int q,int r) {//下标从1开始
int i = q - 1;
int j;
int pivot = A[r];
for (j = q;j < r;j++) {
if (A[j] <= pivot) {
int t;
i = i + 1;
t = A[i];
A[i] = A[j];
A[j] = t;
}
}
A[r] = A[i + 1];
A[i + 1] = pivot;
return i + 1;
}
//这个过程类似于二叉树的线序遍历
void QUICK_SORT (int *A,int q,int r) {
if (q >= r) {
return;
}else {
int p = PARTITION (A,q,r);
QUICK_SORT (A,q,p - 1);
QUICK_SORT (A,p + 1,r);
}
}
快速排序(1)
最新推荐文章于 2019-04-29 09:04:10 发布