歸併排序的進一步理解

2022-08-14 23:12:15 字數 744 閱讀 3407

歸併排序,顧名思義-先遞迴再合併的排序方式,一層一層的遞迴,當遞迴到最底層的時候,進行合併操作,這也是分治演算法的經典運用。

首先是要進行把兩個有序的序列進行合併操作,需要借助輔助空間,先把有序序列儲存在輔助空間中,在從輔助空間把有序序列複製到原序列中,完成合併操作,相應**如下:

void merge(int a , int first , int mid , int last , int

temp)

然後就是遞迴函式的操作,先把原來序列分成兩組無序序列,再分別把這兩組無序序列分別分為兩個無序序列,直到不能再分為止,預設單個元素為有序序列,然後進行合併排序,相應**如下:

void mergesort(int a , int first , int last , int

temp)

}

全部歸併排序演算法**實現如下:

#includevoid merge(int a , int first , int mid , int last , int

temp)

void mergesort(int a , int first , int last , int

temp)

}int

main()

歸併排序演算法的效率還是比較高的,設數列長度為n,則將數列分為小數列一共需要logn步,每步都是合併有序數列的過程,所以歸併排序的時間複雜度為:o(n*logn),空間複雜度為o(n);

堆排序的進一步理解

堆 顧名思義,上面小,下面大,或者上面大,下面小。在堆排序過程中,首先應該建堆。如何將陣列中的元素建立成乙個規範的堆行結構。二叉堆是完全二叉樹或者是近似完全二叉樹。二叉堆滿足二個特性 1 父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值。2 每個結點的左子樹和右子樹都是乙個二叉堆 都是最...

堆排序的進一步理解

堆 顧名思義,上面小,下面大,或者上面大,下面小。在堆排序過程中,首先應該建堆。如何將陣列中的元素建立成乙個規範的堆行結構。二叉堆是完全二叉樹或者是近似完全二叉樹。二叉堆滿足二個特性 1 父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值。2 每個結點的左子樹和右子樹都是乙個二叉堆 都是最...

bufferedReader進一步理解

public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...