二分歸併排序:對n個不同的數構成的陣列a[1…n]進行排序,其中n=2^k(在這裡舉例n=8)
//二分歸併排序演算法
void
merge_sort
(int
* arr,
int* temparr,
int start,
int mid,
int end)
//arr原陣列,temparr排序後陣列
while
(left_start <= left_end)
temparr[index++
]= arr[left_start++];
while
(right_start <= right_end)
temparr[index++
]= arr[right_start++];
for(index = start; index <= end;
++index)
arr[index]
= temparr[index];}
void
sort_message
(int
* arr,
int* temparr,
int start,
int end)
}int
main
(void);
//這裡以這一組數字為例
int n =
sizeof
(a)/
sizeof
(a[0])
;int i, temp[8]
;//用於儲存排序後結果的陣列
printf
("原序列為:\n");
for(i =
0; i < n;
++i)
printf
("%d "
, a[i]);
sort_message
(a, temp,
0, n -1)
;printf
("\n排後序列:\n");
for(i =
0; i < n;
++i)
printf
("%d "
, a[i]);
return0;
}時間複雜度分析:遞迴分解資料,需要遞迴logn次,每次都需要對n個資料掃瞄一次,最好最壞平均都一樣,所以o(nlogn)
空間複雜度分析:歸併排序需要乙個臨時temp來儲存歸併的結果,所以o(n)
並歸排序演算法
並歸排序演算法 控制台程式 static void main string args private static int method int nomethoddata for int i 0 i nomethoddata.length i else left method left 左側陣列遞迴...
前端排序演算法 並歸排序
一.歸併排序 1.演算法描述 1 將陣列劃分成left和right兩部分,分別對left和right迴圈遞迴上述操作直至陣列的長度為1 2 從內到外依次完成陣列的大小的組合合併 2.演算法實現 function mergesort arr function merge left,right else...
二分查詢排序
static final int n 15 static void quicksort int arr,int left,int right 快速排序演算法 if ltemp rtemp ltemp if leftx high mid 1 else low mid 1 return 1 未找到 pu...