Java-快速排序算法的实现

下面代码的一些提示:

使用数组的首元素作为轴值;

每次移动都是右指针先向左移动,直到遇到第一个比轴值小的元素 or 右指针遇到了左指针 停止; 接下来左指针向右移动,直到遇到第一个比轴值大的元素,或者遇到了右指针停止。当左右指针都停止移动时,如果两者已经相遇,则left指针(或right指针)所处的位置即为轴值应处于的正确位置,交换left指针处的值和轴值;若左右指针都停止移动时,两者尚未相遇,则交换两指针所指的值,并继续向左、向右移动(right指针向左,left指针向右),重复以上过程。


Java代码如下:

public class QuickSort {
	
	public int partition(int[]nums, int left, int right){
		int begin = left;
		// 确定轴值
		int value = nums[begin];
		
		while(left != right ){
			// 右指针向左移动,直到遇到第一个比轴值小的元素
			while(nums[right] >= value && right>left ){
				right --;
			}
			// 左指针向右移动,直到遇到第一个比轴值大的元素
			while(nums[left] <= value && left<right){
				left ++;
			}
			
			// 当上述移动完成后,如果left和right未相遇
			if(left != right){
				// 交换left和right所在位置的数
				int temp = nums[left];
				nums[left] = nums[right];
				nums[right] = temp;
			} else{
				// 如果上述移动完成后,left和right相遇了
				// 交换left和轴值
				int temp = nums[left];
				nums[left] = nums[begin];
				nums[begin] = temp; 
				// left的位置就是轴值应该处于的位置
				return left;
			}
		}
		return left;	
	}
	
	
	public void Sort(int[] nums, int left, int right){
		if(nums==null || nums.length <= 1){
			return;
		}
		if(right-left < 1){
			return;
		}
		// 确定划分位置index
		int index = partition(nums, left, right);
		// 根据划分位置index,将数组分为左右两部分,对两部分递归的进行快排
		Sort(nums, left, index-1);
		Sort(nums, index+1, right);
	}
	
	
	public static void main(String[] args) {
		int[] nums = {5,62,123,7,95,55,12,12,34,46};
		QuickSort quickSorter = new QuickSort();
		quickSorter.Sort(nums, 0, nums.length-1);
		for(int i: nums){
			System.out.print(i + "  ");
		} 
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值