quick_sort新手入门

一直说要开通个博客,一直拖拖拉拉的到现在,想写点东西能给自己整理下思路,也能帮助下可爱的同学,水平有限,有不足可以指正,不喜勿喷

在java中有个叫Arrays.sort()的方法,可以为我们实现对数组的升序排序,实际上,它使用的是一种经过优化的快速排序,而快速排序是普通冒泡排序的改进。

对于一个给定的数组array,快速排序的思想是,选取其中一个元素k1作为关键字,通过一定的方法把小于k1的所有元素移动到k1的左边,大于k1的元素移动到k1的右边。

举个例子,有这样一个数组array:

57,68,59,52,72,28,96,33,24,19

假设我们选取57为k1,通过移动分为

19,24,33,52,28,57,96,72,59,68;

令S1={19,24,33,52,28},S2={96,72,59,68}

对S1,S2两个子集分别再做一次这样的操作,不断细分,最后达到每一个元素,左边的比右边的小,实现排序。

至于如何实现元素的移动,给出一个图可能更方理解,图是网上找的,画质有点模糊,不过不影响我们分析问题。


源码如下,亲测可用

public static void quick_sort(int[] array,int left,int right){//left,right刚开始分别是57,19
		if(left<right){//每次递归调用执行这一步,用于判断是否已经到了最底层
			//把每一个子序列的左右游标分别赋值给零时变量,一般选取最左边的作为基准值
			int i=left,j=right,referenceValue=array[left];
			//在执行循环过程中,i,j的值是会更改的
			while(i<j){
				while(i<j && array[j]>=referenceValue){
					j--;
				}
				if(i<j){
					//这里其实有个很巧妙的操作,i++就是自身+1,但是自加之前进行运算
					//假设原来i=3,这个语句执行的时候,i++,i瞬间变为4
					//但是还是用i=3进行操作,也就是array[3]=array[j];
					array[i++]=array[j];
					//这个代码可以等价为array[i]=array[j];i++
				}
				//这里是左游标往右边移动,具体过程跟上面相反
				while(i<j && array[i]<referenceValue){
					i++;
				}
				if(i<j){
					array[j--]=array[i];
				}
			}
			
			array[i]=referenceValue;
			quick_sort(array,left,i-1);
			quick_sort(array,i+1,right);
			
		}
	}
以下是测试代码

	public static void main(String[] argt){
		int[] array={57,68,59,52,72,28,96,33,24,19};
		int left=0,right=array.length-1;
		quick_sort(array,left,right);
		for(int i=0;i<array.length;i++){
			System.out.println(array[i]);
		}
	}
	





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值