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
极客时间-排序-归并排序(查找一个数组中第k个大的元素)
最新推荐文章于 2021-05-25 08:53:45 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)