十大排序演算法及C 實現

2021-09-27 04:38:45 字數 2019 閱讀 8221

演算法

平均時間複雜度

最好最壞

空間複雜度

穩定性氣泡排序o(n2)

o(n)

o(n2)

o(1)

穩定選擇排序

o(n2)

o(n2)

o(n2)

o(1)

不穩定插入排序

o(n2)

o(n)

o(n2)

o(1)

穩定希爾排序

o(nlogn)

o(nlog2n)

o(nlogn)

o(1)

不穩定歸併排序o(nlogn)

o(nlogn)

o(nlogn)

o(n)

穩定快速排序o(nlogn)

o(nlogn)

o(n2)

o(logn)

不穩定堆排序

o(nlogn)

o(nlogn)

o(nlogn)

o(1)

不穩定計數排序

o(n+k)

o(n+k)

o(n+k)

o(k)

穩定桶排序

o(n+k)

o(n+k)

o(n2)

o(k)

穩定基數排序

o(n*k)

o(n*k)

o(n*k)

o(n+k)穩定

氣泡排序:

for

(int i=

0;isize()

-1;i++)}

if(issort)

break

;}

歸併排序:

核心思想是分治法,將陣列一分為二,排序後再合併。

//合併兩個有序陣列

void

merge

(vector<

int>arr,vector<

int>temparr,

int start,

int mid,

int end)

}//主函式

void

sort

(vector<

int>arr,vector<

int>temparr,

int start,

int end)

**注釋

left>mid||temparr[right]end||temparr[left]快速排序:

核心思想也是分治法。

int

partition

(vector<

int>arr,

int start,

int end)

}swap

(arr[start]

,arr[mark]);

return mark;

//切分後的索引

}void

sort

(vector<

int>arr,

int start,

int end)

最好情況:每次的基準值都平均將陣列劃分為等長的兩部分。o(nlogn)

最壞情況:每次都將陣列劃分時,只劃分出一邊。不均衡。o(n2)

堆排序:是一種優先佇列。有兩種實現方法, 最大堆和最小堆。公升序用最大堆。

void

sink

(vector<

int>arr,

int index,

int n)

}void

buildheap

(vector<

int>arr,

int n)

void

sort

(vector<

int>arr)

}

十大排序演算法(C 實現)

排序演算法 平均時間複雜度最好情況最壞情況空間複雜度穩定性 氣泡排序 o n o n o n o 1 穩定選擇排序 o n o n o n o 1 不穩定插入排序 o n o n o n o 1 穩定希爾排序 o nlogn o o n o 1 不穩定歸併排序 o nlogn o nlogn o n...

十大排序演算法 C 實現

include stdafx.h include include include using namespace std 1氣泡排序 void bubblesort vector int v 2選擇排序 void seletionsort vector int v 3插入排序 void insert...

十大排序演算法(c )

1.氣泡排序 每一輪都從頭開始比較,比較當前數與後一位數,若當前數大於後一位數則進行交換,每一輪都會在末尾得到一位排序正確的數,因此每一輪比較結束,下一輪的比較範圍將縮小 ja j 1 if ischange break 2.插入排序 每一輪將當前數 a i 插入到前面已經排序好的合適位置,因此關鍵...