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 如何找到這個出現奇數次的整數?解法 遍歷整個陣列,依次做異或運算。由於陣列存在兩個出現奇數次的整數,所以最終異或的結果,等同於這兩個整數的異或結果。這個結果中...