快速排序算法

   快速排序算法是排序算法中的重点与难点,具体的排序流程如下:

算法流程:
   a.选择样本数列中的中间元素作为基准值,单独保存起来;
   b.分别使用左右两边的元素依次和基准值比较大小,将所有比基准值小的元素放在左边,
     将所有大于等于基准值的元素放在右边,这个过程叫分组;
   c.分别对左右两边的元素再次分组,直到处理完毕所有元素为止;

代码如下:

public static void quick(int[] arr, int left, int right){
		//1.计算中间元素的下标,让中间元素作为基准值单独保存起来
		int p = (left+right)/2;
		int pivot = arr[p];
		//2.分别使用左右两边的元素依次与基准值比较大小,将所有比基准值小的元素放左边,
		//  将所有大于等于基准值的元素放在右边,这个过程叫分组
		int i = left;
		int j = right;
		for( ; i < j; ){
			//当左边有元素并且左边的元素小于基准值时,则使用下一个元素与基准值比较
			while(i<p && arr[i] < pivot){
				i++;
			}
			//直到左边有元素但左边的元素不再小于基准值时,则将左边的元素赋值到p指向
			//的位置,p指向该元素原来的位置
			if(i < p){
				arr[p] = arr[i];  //将i位置的元素赋值给p的位置
				p = i;   //p指向元素原来的位置
			}
			while(j>p && arr[j] >= pivot){
				j--;
			}
			if(j > p){
				arr[p] = arr[j];
				p = j;
			}
		}
		//3.直到左右两边元素的下标重合时,将基准值放到重合的位置
		arr[p] = pivot;
		//4.分别对左右两边的分组进行再次分组,使用递归的思想处理
		if(p-left > 1){
			quick(arr, left, p-1);
		}
		if(right-p > 1){
			quick(arr, p+1, right);
		}
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值