如何在N個無序陣列元素中,查詢第K大元素

2021-06-25 11:35:07 字數 3032 閱讀 3656

package com.lee.sort;

public class heapsort ;

system.out.println("排序前..........................");

for(int i = 1; i < array.length; i++)

system.out.println();

heap_size = array.length;

heapsort(array);

system.out.println("排序後.........................");

for(int i = 1; i < array.length; i++)

}private static void heapsort(int array)

buildheap(array);

//for(int i = array.length - 1; i >= 2; i--)}}

/*** 交換陣列元素的值

* * */

private static void swap(int array, int i, int j)

//構建最大堆

private static void buildheap(int array)

}/**

* 構建最大堆時,查詢最大值

* * 假設array[i]是最大值,即假設i是最大值的索引

* */

private static void maxheapvalue(int array, int i) else

//判斷右子樹是否存在,且比較,找出更大值的索引

if(right < heap_size && array[right] > array[max])

system.out.println("------- max == " + max + ", i = " + i);

if(max == i) else

system.out.println();

//交換之後調整子樹,保持最大堆性質

maxheapvalue(array, max);}}

}

執行過程與結果:

排序前..........................

8   20   15   11   50   30   90   77   33   56   

------- max == 10, i = 5

8   20   15   11   56   30   90   77   33   50   

------- max == 10, i = 10

------- max == 8, i = 4

8   20   15   77   56   30   90   11   33   50   

------- max == 8, i = 8

------- max == 7, i = 3

8   20   90   77   56   30   15   11   33   50   

------- max == 7, i = 7

------- max == 4, i = 2

8   77   90   20   56   30   15   11   33   50   

------- max == 9, i = 4

8   77   90   33   56   30   15   11   20   50   

------- max == 9, i = 9

------- max == 3, i = 1

90   77   8   33   56   30   15   11   20   50   

------- max == 6, i = 3

90   77   30   33   56   8   15   11   20   50   

------- max == 6, i = 6

------- max == 2, i = 1

77   50   30   33   56   8   15   11   20   90   

------- max == 5, i = 2

77   56   30   33   50   8   15   11   20   90   

------- max == 5, i = 5

------- max == 2, i = 1

56   20   30   33   50   8   15   11   77   90   

------- max == 5, i = 2

56   50   30   33   20   8   15   11   77   90   

------- max == 5, i = 5

------- max == 2, i = 1

50   11   30   33   20   8   15   56   77   90   

------- max == 4, i = 2

50   33   30   11   20   8   15   56   77   90   

------- max == 4, i = 4

------- max == 2, i = 1

33   15   30   11   20   8   50   56   77   90   

------- max == 5, i = 2

33   20   30   11   15   8   50   56   77   90   

------- max == 5, i = 5

------- max == 3, i = 1

30   20   8   11   15   33   50   56   77   90   

------- max == 3, i = 3

第k大元素值: 33

排序後.........................

30   20   8   11   15   33   50   56   77   90  

無序數字中位數 如何在無序陣列中查詢第K小的值

如題 給定乙個無序陣列,如何查詢第k小的值。例子如下 在乙個無序陣列,查詢 k 3 小的數 輸入 arr 輸出 7在乙個無序陣列,查詢 k 4 小的數 輸入 arr 輸出 10幾種思路如下和複雜度分析如下 1 最簡單的思路直接使用快排,堆排或者歸併排,排序之後取陣列的k 1索引的值即可,時間複雜度為...

無序陣列中找第K個的數

題目分析 也就是從小往大排,第k小那個數。方法1 排序 nlogn 方法2 利用堆 nlogk 首先將前k個元素構建最大堆,堆頂是前k個元素中第k小的元素。這步複雜度klogk 遍歷剩餘元素 這步複雜度 n k logk 如果新元素 堆頂 堆頂不可能是第k大元素 移除堆頂 將新元素插入堆 否則 新元...

如何在無序陣列中尋找兩個出現奇數次整數

乙個無序陣列裡有若干個正整數,範圍從1到100,其中98個整數都出現了偶數次,只有 兩個整數出現了奇數次 比如1,1,2,2,3,4,5,5 如何找到這個出現奇數次的整數?解法 遍歷整個陣列,依次做異或運算。由於陣列存在兩個出現奇數次的整數,所以最終異或的結果,等同於這兩個整數的異或結果。這個結果中...