排序之歸併排序和基數排序

2021-10-12 20:01:36 字數 1243 閱讀 1935

void

mergesort

(int arr,

int copy,

int left,

int right)

//left=0,right=n-1

int mid=

(left+right)/2

;mergesort

(arr,copy,left,mid)

;//不斷遞迴將其劃分成最小的部分存進copy中,再讓mid兩邊的資料進行比較之後放入arr中

mergesort

(arr,copy,mid+

1,right)

;merge

(arr,copy,left,mid,right);}

void

merge

(int arr,

int copy,

int left,

int mid,

int right)

int s1=left;

int s2=mid+1;

int k=left;

//將元素放入arr中進行遍歷

while

(s<=mid&&s2<=right)

else

}while

(s1<=mid)

//說明s1中還有數沒放進arr,繼續迴圈讓mid左邊s1中的數全部放進arr中

while

(s2<=right)

}

總結說明
void

getkey

(int value,

int k)

//根據k得到278中每位置的數字,k=0時得到資料個位,k=1時得到資料十位

return key;

}void

radixsort

(int arr,

int n)

for(

int i=

0;i<

3;i++

)//一共三位所以取放三次

}void

distribute

(int arr,

int n,list lt[10]

,int k)

int key;

for(

int i=

0;ivoid

collect

(int arr[

],list lt[10]

)}}

總結

歸併排序和基數排序

空間複雜度 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...

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

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

11 歸併排序和基數排序

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