快速排序(算法导论)
- 算法思想
一个单向的指针来对数组进行遍历:
(1)首先将第一元素设置为基准元素,初始化i=low, j=low+1
(2)利用j从第二个元素开始与基准元素比较,如果大于基准元素则什么都不执行,如果小于基准元素,则i++,并将其与前面较大的元素进行交换(A[i]和A[j]交换)
(3)继续使用同样的方法遍历下面的元素,遍历结束后,再将基准元素放到中间位置(A[i]和A[low]交换)
(4)接着递归调用排列两个子序列,直至整个序列有序。 - 划分函数伪代码
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/034af41fa7fd4337a746b02fb29a55d6.png)
- 快速排序的伪代码
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/aaa3719ba5c868155da9bb745207ac44.png)
- java代码实现
public static void swap(int a[], int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
public static int split(int a[],int low ,int high) {
int x=a[low];
int i=low;
for (int j = low+1; j<=high; j++) {
if(a[j]<=x) {
i++;
swap(a, i, j);
}
}
swap(a, low, i);
return i;
}
public static void sort(int a[],int low,int high) {
int q=split(a, low, high);
if(low<high) {
sort(a,low,q-1);
sort(a,q+1, high);
}
}