歸併排序和基數排序的實現思路

2021-10-06 02:57:12 字數 799 閱讀 7754

大問題 ------------------->小問題 【分而治之】

遞迴實現

process

(int

arr,

int l,

int r)

遞迴行為

​ 功能:實現陣列array[l…r]有序

​ base case :l== r(此時陣列中只有乙個元素到了遞迴的最後一層

merge

(int

arr,

int l,

int m,

int r)

分而治之的思路

​ 功能:把陣列分為左右兩部分 將兩部分merge到一起

​ 實現:

非遞迴實現

同樣需要用到遞迴方式實現的merge方法,但是將遞迴的方式轉換成了非遞迴的方式

思路:依舊是桶排序的思路,但與計數排序不同

思路:先找出指定陣列中最大的數,並得到其位數

首先因為是十進位制,需要設定10個桶,將陣列中的數以個位為標準,從左到右填入0~9這10個桶中,然後按照桶的次序從左到右取出,此時個位已排好

之後,以十位為標準,進行操作2,從左到右取出後按照十位排好,且同乙個桶中,因為之前個位已排好的原因,導致十位相同的情況下,個位小的排在前面,個位大的排在後面,因此保留了個位排序的某些特徵,因此,此時的結果為所有數按照十位和個位排好序

以此類推,從低位到高位,迴圈操作n次(n即為操作1中得到的位數)最終實現排序

實現過程:實現的難點在於思路中的操作2,3,4

實現思路:

歸併排序和基數排序

空間複雜度 o n o n o n 時間複雜度 o n log2 n o nlog 2n o nlog 2 n 穩定性 穩定 適用於順序儲存和鏈式儲存 typedef int elemtype 合併兩個相鄰的有序線性表 void merge elemtype a,int low,int mid,in...

11 歸併排序和基數排序

核心思想 拆分和合併,拆分其實只幹了一件事將陣列2等份,一直拆分到無法拆分為止,合併在於從最小拆分單元先排序,然後向上合併再排序,最終得到乙個有序陣列。分支演算法採用的遞迴操作,核心 在於合併。public class mergesort int temp newint arr.length mer...

排序五 歸併排序和基數排序

歸併排序是另一類不同的排序方法,這種方法是運用分治法解決問題的典型範例。歸併排序的基本思想是基於合併操作,即合併兩個已經有序的序列是容易的,不論這兩個序列是順序儲存還是鏈式儲存,合併操作都可以在 m n 時間內完成 假設兩個有序表的長度分別為 m 和 n 為此,由分治法的一般設計步驟得到歸併排序的過...