极客时间-排序-快速排序


public class FastSort {
   
	
	public void mergeSort(Integer a[],int left,int right) {
		 if(left>right) {
			 return;
		 }
		 int index=findIndex(a,left,right);
		 mergeSort(a, left,index-1);//分解 
		 mergeSort(a, index+1,right);//分解
	}
	
	/*1.取最后一个元素值为k,从左到右找出一个大于k的值ki,从右到左开始遍历,找出一个小于k的值kj
	 *2.若此时i<j,交换a[i]和a[j]的值
	 *3.若i>=j,那么此时j所指向的值小于k,i指向的值大于k,交换k和aj的值,并返回j的位置,也就是index的位置,index的位置就是它该在的位置
	*/
	public int findIndex(Integer a[], int left, int right) {
		int priod = a[left];
		int i = left+1, j = right;

		while (true) {
			/*
			 * 从左到右,找出一个大于priod的数
			 */
			for (int k = i; k <=right; k++) {
				if (a[i] >= priod) {
					break;
				}else {
					i++;
				}
			}

			/*
			 * 从右到左,找出一个小于priod的数
			 */
			for (int k = j; k >= left; k--) {
				if (a[j] <= priod) {
					break;
				}else {
					j--;
				}
			}

			if (i < j) {
				int temp = a[i];
				a[i++] = a[j];
				a[j--] = temp;
			} else {
				int temp = a[j];
				a[j] = priod;
				a[left] = temp;
				return j;
			}

		}

	}


	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Integer a[] = {90,2,45,36,67,78,56,56,56, 10, 13, 3, 7,9, 8, 10, 15, 11};
		FastSort mergesort=new FastSort();
		mergesort.mergeSort(a, 0,a.length-1);
		for(Integer c:a) {
			System.out.print(c+" ");
		}

	}

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值