您的位置:首页 > 其它

常见排序算法之快速排序

2017-07-20 16:35 232 查看
快速排序是一种分区交换排序,是目前已知实测最快的一种排序算法.

6.快速排序

算法思想

快速排序的基本思想是,通过一趟划分将数组或线性表划为左部,右部,和基准值.其中左部都比基准值小,右部都比基准值大.

(1)在数组中选择一个枢纽元key,一般情况下选取第一个数据

(2)将所有比key值小的数据移到key值左边,将大于key值的数据移到key值右边.

(3)将左部和右部分别递归重复第二步,直到所有元素排好序位置

示意图



代码演示

/**
* @param array
* 快速排序
*/
public static void quickSort(int[] array) {
if(array.length>0){
_quickSort(array, 0, array.length-1);
}else{
System.out.println("请输入非空数组!");
}
}


快排主体

/**
* @param array
* @param left
* @param right
* 快速排序主体
*/
public static void _quickSort(int[] array,int left ,int right) {

if(left<right){
//划分
int middle=patition(array,left,right);
_quickSort(array, left, middle-1); //对左边快排
_quickSort(array, middle+1, right);//对右边快排
}
}


划分过程

/**
* @param array
* @param left
* @param right
* @return middle 中枢元下标
* 快排划分
*/
private static int patition(int[] array, int left, int right) {
int middle;
int key=array[left];
while(left<right){
while(array[right]>=key&&left<right){
right--;
}
array[left]=array[right];
while(array[left]<key&&left<right){
left++;

a7aa
}
array[right]=array[left];
}
array[left]=key;
middle=left;
return middle;
}


算法性能分析

算法的最好时间复杂度为O(nlong2n)

最坏时间复杂度为O(n2)

平均时间复杂度为O(nlong2n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: