package com.tju.sort;
/**
* Created by xiangyang.laixiang on 2016/8/2.
*/
public class QuickSort {
/**
* 快速排序
* 挖坑填数+分治思路
* 首先寻找一个基准点,将其值c缓存下来
* 以基准点为标准左右挪移,将所有大于基准点的数挪到右边,小于基准点的数
* 挪到左边,首先在起始点a挖坑,然后在右面寻找第一个小于基准点的数b填入起始点的坑,此时相当于又
* 在b处挖了一个新坑
* 接着从左边找到大于基准点的数d填入b的坑,此时又相当于在d处挖了一个新坑
* 最后将我们刚开始缓存下来的值c填入d
* 此时坑没有了,操作也完成了
*/
public static void quickSort(int a[], int from,int to) {
if(from<to)
{
//寻找中值点
int middle = getMiddle(a,from,to);
quickSort(a,from,middle);
quickSort(a,middle+1,to);
}
}
public static int getMiddle(int a[], int low, int high)
{
//缓存值
int key=a[low];
while(low<high)
{
//从右边找小于起始值的数
while(low<high&&a[high]>=key)
{
//找到
high--;
}
//填坑
a[low]=a[high];
while(low<high&&a[low]<=key)
{
//找到
low++;
}
//填坑
a[high]=a[low];
}
//填坑
a[low]=key;
return low;
}
public static void main(String[] args)
{
int a[]={6,1,2,7,8,9,3,6};
quickSort(a,0,a.length-1);
for (int value : a)
{
System.out.println(value);
}
}
}
快速排序
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 选择排序 对于任何输入,时间为O(n*n); 冒泡排序 最优(对于升序的数组,因为加入了一个跳出判断):O(n),...
- 给定数组 int[] arr = {3,6,8,4,7,5,9,1,2,0};使用至少三种方法对数组arr排序(作...
- 用Objective-C实现几种基本的排序算法,并把排序的过程图形化显示。其实算法还是挺有趣的 ^ ^. 选择排序...
- 一般来说,这三者的时间复杂度O(NlogN),空间复杂度O(n)优化后,空间复杂度均可为O(1),如下文中的快排和...