您的位置:首页 > 其它

3-排序-快速排序

2015-10-15 15:50 253 查看
一、算法描述

排序算法中的一种
二、算法理解

选定枢轴,通过一次排序,实现枢轴左边的数都比枢轴小,右边的数都比枢轴大;再分别对枢轴两边数据进行递归操作。
三、算法实现

3.1、思路

两个函数:

分隔函数partition(一次排序过程,返回枢轴位置)

递归函数(完成递归过程)

深层次理解:所有枢轴位置排好后,排序工作就完成了

3.2、示意图



3.3、实现
public class QuickSort {
public static void main(String[] args) {
int [] array = {34,21,12,37,57,62,2};

quickSort(array, 0, array.length - 1);

for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + ", ");
}
}

public static void quickSort(int[]n ,int left,int right){
int pivot = 0; // 枢轴
if (left < right) {
pivot = partition(n, left, right);
//对左右数组递归调用快速排序,直到顺序完全正确
quickSort(n, left, pivot - 1);
quickSort(n, pivot + 1, right);
}
}

public static int partition(int[]n ,int left,int right){
int pivotkey = n[left];
while (left < right) {
while (left < right && n[right] >= pivotkey) {
right--;
}
n[left] = n[right]; //将比枢轴小的元素移到低端,此时right位相当于空,等待低位比pivotkey大的数补上

while (left < right && n[left] <= pivotkey) {
left++;
}
n[right] = n[left]; //将比枢轴大的元素移到高端,此时left位相当于空,等待高位比pivotkey小的数补上
}
n[left] = pivotkey; // 当left == right,完成一趟快速排序,此时left位相当于空,等待pivotkey补上
return left;
}
}


四、其他

4.1、
http://ahalei.blog.51cto.com/4767671/1365285 http://www.cnblogs.com/morewindows/archive/2011/08/13/2137415.html http://blog.csdn.net/xuxurui007/article/details/7639863

http://blog.csdn.net/wangkuifeng0118/article/details/7286332

http://blog.csdn.net/morewindows/article/details/6684558
4.2、

递推递归,回溯算法,穷举搜索,排列组合、冒泡排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: