您的位置:首页 > 其它

八大排序算法之快速排序

2017-09-25 15:15 246 查看
/**
* Created by leixingbang on 2017/9/7.
* 快排最主要思想是分治思想:
* (1)找出基线条件
* (2)不断拆分,缩小问题规模,使其满足基线条件
*  对快排来说
*  (1)基线条件:空数组或者只有一个元素的数组
*  (2)将大的数组拆分为两个满足条件的小数数组+基准值:左侧小于基准值的子数组+基准值+右侧大于基准值的子数组
*  (3)递归拆分子数组,使其满足条件
*/
public class MyQuickSort2 {
public static int getMiddleIndex(int []array,int i,int j)
{
int middle=array[i];//任选一个元素作为基准值,这里选择第一个元素作为基准条件
while (i<j)
{
while(i<j) {
//从右向左找到比基准条件小的数字,并将其位置与middle所在的位置进行狡猾
if(array[j]>=middle)
j--;
else { //找到该位置
array[i] = array[j];
break;
}
}
while (i<j)
{
//从左向右找到比基准条件大的数字
if(array[i]<=middle)
i++;
else {
array[j]=array[i];
break;
}
}
}
array[i]=middle;
return i;
}
public static void sort(int []array,int low,int high)
{
//low<high用于控制边界条件,假如只有1个元素,则low=high=0
//加入只有两个元素,则调用getMidlldleIndex后,相当于对调,再次sort进入只有一个元素状态。

if(low<high) {
int index = getMiddleIndex(array, low, high);
sort(array, low, index - 1);
sort(array, index + 1, high);
}
}
public static void main(String[] args) {
int []array={5,3,6,1,2};
// getMiddleIndex(array,0,array.length-1);
sort(array,0,array.length-1);
for(int i=0;i<array.length;i++)
{
System.out.print(array[i]+",");
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: