算法起步之快速排序

原文: 算法起步之快速排序

  快速排序一听这个名字可能感觉很快,但是他的算法时间复杂度最坏情况却跟插入排序是一样的。之所以成为快速排序是因为他的平均效率比堆排序还要快,快速排序也是基于分治思想与归并排序差不多,但是快速排序是原址的,直接在原数组操作不需要再开辟新的存储空间。快速排序的思想很简单,就是选定一个关键字k将原数组分成两份g1与g2,g1中所有的元素都比k小或者相等,而g2中所有的数据都比k大或者等于,这样对g1与g2分别进行快速排序,最终我们得到的就是一个有序的数组。代码中的sort方法就是对刚才语句的描述。而关键的算法就是去寻找k的位置将原数组分为大小两部分的过程。方法getPlocation就是快速排序的核心。他的实现原理有点像插入排序只是有点像。每次都把map中end位置的元素作为关键字,通过与end元素对比将数组分成大小两部分,而i与j则是两个分割线,i与j之间的数都是比core大的元素,i与j就像一条贪吃蛇,当j的下一个数比core大的时候j+1,i到j的长度增大了,而如果比core小的话,i与j都向前走一下,并将那个小数放在i的前面。这样循环一遍后,start到end-1之间就是按大小分开的,最后将core放在中间,将core的位置返回就是分界线了。

public class QuickSort {
	public int getPlocation(int[] map,int start,int end){
		int core=map[end];
		int i=start-1;
		for(int j=start;j<=end-1;j++){
			if(map[j]<=core){
				i++;
				int cache=map[j];
				map[j]=map[i];
				map[i]=cache;
			}
		}
		i++;
		map[end]=map[i];
		map[i]=core;
		return i;
	}
	public void sort(int[] map,int start,int end){
		if(start<end){
		int p=getPlocation(map, start, end);
		sort(map, start, p-1);
		sort(map,p+1,end);
		}
	}
	public static void main(String[] args) {
		int[] map=new int[]{4,1,5,3,7,12,65,7};
		QuickSort qs=new QuickSort();
		qs.sort(map, 0, map.length-1);
		for (int i = 0; i < map.length; i++) {
			System.out.println(map[i]);
		}
	}
}
         友情提示:转载请注明出处 【作者:idlear  博客: http://blog.csdn.net/idlear


posted on 2014-02-23 15:42 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3562014.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值