每日一道小演算法(七十七) 排序演算法 堆排序

2021-10-03 12:24:55 字數 765 閱讀 7718

前言:

今天覆習了一下排序演算法,堆排序寫的不太熟練,所以在這裡記錄一下,方便以後的學習。

就是實現堆排序。

基本思路:將待排序序列構造成乙個大頂堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n-1個元素重新構造成乙個堆,這樣會得到n個元素的次小值。如此反覆執行,便能得到乙個有序序列了。

package quicksort;

/** * 堆排序 : 時間複雜度 最好最壞平均複雜度都為o(nlogn)

*/public

class

main

; main.

heapsort

(array)

;for

(int i =

0; i < array.length; i++)}

private

void

swap

(int

array,

int len)

public

void

heapsort

(int

array)

}public

void

heap

(int

array,

int len)

}//先判斷右子樹if(

(2*i+2

)< array[

2*i+2]

)}}}

}

每日一道演算法題 奇偶排序

題目 在乙個n個整數陣列裡面,有多個奇數和偶數,設計乙個演算法,令所有的奇數都在偶數左邊。解題思路 想到的第乙個思路是定義兩個指標,第乙個指標p指向陣列的第乙個元素,第二個指標q指向陣列的最後乙個元素,然後讓p向後遍歷,讓q向前遍歷,直到p找到第乙個偶數,q找到第乙個奇數,交換兩個元素,繼續讓兩個指...

每日一道演算法題

no.1 設指標變數fron t表示鏈式佇列的隊頭指標,指標變數rear表示鏈式佇列的隊尾指標,指標變數s指向將要入佇列的結點x,則入佇列的操作序列為 a.front next s front s b.s next rear rear s crear next s rear s d.s next f...

每日一道演算法題

no.1 若有 18 個元素的有序表存放在一維陣列 a 19 中,第乙個元素放 a 1 中,現進行二分查詢,則查詢 a 3 的比較序列的下標依次為 a.1,2,3 b.9,5,2,3 c.9,5,3 d.9,4,2,3 答案 d.第一次查詢,隊首為下標1,隊尾下標18,所以是 1 18 2 9 第二...