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...