算法图解第四章快速排序java版本

1.算法简单实现步骤
(1)选择一个基准值,一般选数组得第一个。
(2)将数组分成两个子数组:小于基准值的和大于基准值的元素
(3)对这两个子数组进行快速排序(使用递归)

2.算法的平均时间复杂度为nlogn,最糟糕的时候是n^2;

算法简单介绍两个指针,分别从数组的首尾开始向中间运动,左指针先运动,左指针指到的数若大于或等于基准值则停下来,当左指针停下来的时候,右指针运动,右指针指到的数若小于枢纽元则停下来,此时,交换左右指针指向的数,然后重复上述运动。直到左右指针相遇,运动结束。

代码展示


public class quicksort {
	public static  void QuickSort(int [] arr, int low,int high) {
		int i ,j, base,temp;
		if(low>high) {
			return;
		}
		i=low;
		j=high;
		base=arr[low];//base就是基准值
		while(i<j){
			//先看右边的值,依次向左边递减
			while(i<j&&base<=arr[j]) {
				j--;
			}
			//再看左边的值,依次向右边递增
			while(i<j&&base>=arr[i]) {
				i++;
			}
			//如果满足条件,交换两个值
			if(i<j) {
				temp=arr[j];
				arr[j]=arr[i];
				arr[i]=temp;
			}
		}
//		将基准值与i与j的相等位置调换
		arr[low]=arr[i];
		arr[i]=base;
		//递归调用左边数组
		QuickSort(arr, low, j-1);
		//递归调用有半数组
		QuickSort(arr, j+1, high);

	}
		
	public static void main(String[] args) {
		int [] arr= {10,5,2,3};
		QuickSort(arr, 0, arr.length-1);
		for(int i = 0;i<arr.length;i++) {
			System.out.println(arr[i]);
		}	
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值