极客时间-排序-归并排序(查找一个数组中第k个大的元素)

package data.sort.list;public class FastSortTwo { public void mergeSort(Integer a[],int left,int right,int num) { if(left>right) { return; } //每次通过findIndex得到的位置index上的元素都是它在数组排序中应该在的位置,如果要查找第几个最大值,就可以判断num和index是否相等,返回相等时的a[ind.
摘要由CSDN通过智能技术生成
package data.sort.list;

public class FastSortTwo {
   
	public void mergeSort(Integer a[],int left,int right,int num) {
		 if(left>right) {
			 return;
		 }
		 
		 //每次通过findIndex得到的位置index上的元素都是它在数组排序中应该在的位置,如果要查找第几个最大值,就可以判断num和index是否相等,返回相等时的a[index]的值即可
		 int index=findIndex(a,left,right);
		 if(num==(index+1)) {
			 System.out.println("第"+num+"个最大的元素就是"+a[index]);
		 }
		 mergeSort(a, left,index-1,num);//分解 
		 mergeSort(a, index+1,right,num);//分解
	}
	
	
	/*
	 * 这里处理很巧妙,for循环中,虽然对于i==j时并且小于priod时会多一次不必要的交换,但是这样也就不用单独循环找出一个比priod大的a[i],和比priod小的a[j]再交换,
	 * 因为初始值i和j相等,当a[j]始终小于priod时,i的值是会自增的和j相等,一旦a[j]>=priod,那么i就会停留在j所在的位置不变,j继续指向下一个,如果j指向的值小于priod,那么就把a[j]和a[i]交换
	*/
	public int findIndex(Integer a[], int left, int right) {
		int priod = a[right];
		int i = left;
        for(int j = left;j<=r
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值