二分並歸排序

2021-10-04 06:12:56 字數 1354 閱讀 3845

二分歸併排序:對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...