数据结构与算法每日一练---4快排

如何使用快速排序算法对整数数组进行排序?
思路:就是手写快排。
快排原理:
是冒泡排序的升级版,过程是选定数组中第一个数,作为被比较值。该数依次取比较数组中其他值。比较顺序不太平常。首先从末尾比较,若比该数大,则继续向数组头方向比较,若比该数小,则交换两者的位置。交换位置后可以发现,被比较值的右边全都是比它大的数------
这样就达到部分目的了:用该数作为临界值,将原先数组中的所有值分为两边,左边是比它小的,右边比它大的。(相等的呢?那就看客官您的心情了。)

——当该数被交换后,将该数与数组前面的数进行比较,比它小的不管,继续向着数组末尾遍历,一旦碰到比它大的立刻交换位置,这样一来。左右两边的比该数小的数字集合逐渐增大,比该数字大的数字集合也逐渐增大。最终把所有的数比较完后,整个数组就被遍历一遍,并被该数分为两个区了。

代码实现(用递归):

public QuickSort{

//分区函数,最重要!
	public static int partition(int[] arr , int from ,int to){
	int key = arr[from];
	while(from<to){
		while(from<to&&key<arr[to]){
			to--;
}
	int temp =arr[to];
	arr[to] = key;
	arr[from] =temp;
	while(from<to && arr[from]<key){
		from++;
	}
	arr[to] = arr[from];
	arr[from] =key;
}
	return from;
}
//生成新的分区后,重复使用分区函数,直到不能再继续分区为止。
	public static void quickSortFun(int[] arr,int low ,int high){
	//先判断下是否要调用分区函数,判断依据是传进来被分区数组的范围值是否大于1
	//分区数组范围是冲原先数组arr中划分出来的,其范围是[low,high],要判断该范围是否大于  //1,high-low>2,这样可以保证分区的必要性。但一般写的时候是保证high>low,就行了,相当于做了我几次无用的计算操作。
	 if(high>low+2){
		int boundary =partition();
		quickSortFun(arr,0,boundary-1);
		quickSortFun(arr,boundary+1,high);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值