#include
using
namespace std;
void
quicksort
(int arr,
int low,
int high)
;void
mergesort
(int
*a,int l,
int r,
int*b)
;int
main()
;int b[10]
;mergesort
(nums,0,
9,b)
;for
(int i =
0;i<=
9;i++
)return0;
}void
quicksort
(int arr,
int low,
int high)
}/*從右向左找比key小的值*/
while
(arr[
--j]
> key)}if
(i >= j)
break
;/*交換i,j對應的值*/
int temp = arr[i]
; arr[i]
= arr[j]
; arr[j]
= temp;
}/*中樞值與j對應值交換*/
int temp = arr[low]
;//也就是說這個key值讓右面的陣列繼續使用,而左邊的陣列重新啟用乙個新key值
arr[low]
= arr[j]
; arr[j]
= temp;
quicksort
(arr, low, j -1)
;quicksort
(arr, j +
1, high);}
void
mergesort
(int
*a,int l,
int r,
int*b)
//兩個迴圈在一層遞迴中最終只有乙個會執行
while
(i<=mid)
//將i-mid剩餘的數放在最後
b[k++
]=a[i++];
while
(j<=r)
//將j-r剩餘的數放在最後
b[k++
]=a[j++];
for(k=l;k<=r;k++
)//將b陣列中的資料拷貝到原陣列中
a[k]
=b[k]
;}
鍊錶的快排 歸併排序
leetcode 148 排序鍊錶 在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5 歸併法 不斷遞迴下去,最後再合併,合併有序鍊錶,建立dummy結點的技巧。c...
簡潔版本的快排和歸併排序
最簡潔的快排序,遞迴出口 low high low high def quick sort nums,low,high if low high return left low right high pivot nums left while left right while left right a...
快排和歸併排序的非遞迴實現
快速排序 是一種交換排序,當完全有序時退化為氣泡排序,時間複雜度為o n 2 正常情況下為o nlogn 非遞迴 其實就是手動利用棧來儲存每次劃分後兩個序列的起始點和終止點。棧非空時獲取棧頂兩個值 起始點和終止點,然後再根據兩個點劃分獲得中軸,將兩個序列中沒劃分完的起始點和終止點入棧。重複這個過程,...