c 十種基礎排序方法的實現

2021-10-04 14:03:01 字數 2234 閱讀 1520

選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,而氣泡排序、插入排序、歸併排序、計數排序(注意倒著插入)、桶排序和基數排序是穩定的排序演算法

冒泡、選擇、插入、歸併、希爾、堆排序都是基於比較的排序

平均時間複雜度最低o(nlogn)

計數排序、桶排序、基數排序不是基於比較的排序

使用空間換時間,某些時候,平均時間複雜度可以低於o(nlog)

class

solution

//插入排序 最好o(n), 穩定排序

void

insertsort

(vector<

int>

& nums)

nums[j+1]

= tmp;}}

//氣泡排序 穩定排序

void

bubblesort

(vector<

int>

& nums)}}

//選擇排序, 不穩定排序

void

selectsort

(vector<

int>

& nums)

swap

(nums[index]

,nums[i]);

}}//歸併排序 穩定排序

void

mergesort

(vector<

int>

&nums,

int l,

int r)

while

(i <= mid) tmp.

emplace_back

(nums[i++])

;while

(j <= r) tmp.

emplace_back

(nums[j++])

;for

(int i =

0;i < r-l+

1;i ++

) nums[i+l]

= tmp[i];}

//快速排序,不穩定排序,最壞的時候是o(n^2)

void

quicksort

(vector<

int>

& nums,

int l,

int r)

intpartition

(vector<

int>

& nums,

int l,

int r)

nums[l]

= val;

return l;

}// 堆排序,任何情況都是o(nlogn) 不穩定

void

adjust

(vector<

int>

& nums,

int index,

int size)

void

build

(vector<

int>

& nums,

int size)

for(

int i = size-

1; i >=1;

-- i)

}//希爾排序,不穩定排序

void

shellsort

(vector<

int>

&nums,

int size)

nums[j+l]

= tmp;}}

}}//計數排序 穩定排序

void

countsort

(vector<

int>

&nums)

}//桶排序 穩定排序

void

bucketsort

(vector<

int>

& nums,

int k)

for(

int i =

0;i <= k; i ++)}

//基數排序 穩定排序

void

radixsort

(vector<

int>

& nums,

int base)

int cnt =0;

for(

int j =

0;j < base;j ++)}

}}};

js實現十種排序演算法

排序演算法 平均情況 最好情況 最壞情況 空間複雜度 穩定性氣泡排序 o n2 o n o n2 o 1 穩定快速排序 o nlog2n o nlog2n o n2 o log2n o n 不穩定直接插入排序 o n2 o n o n2 o 1 穩定希爾排序 o nlog2n o n2 o n1.3...

十種排序演算法

1.常見演算法分類 十種常見排序演算法一般分為以下幾種 1 非線性時間比較類排序 交換類排序 快速排序和氣泡排序 插入類排序 簡單插入排序和希爾排序 選擇類排序 簡單選擇排序和堆排序 歸併排序 二路歸併排序和多路歸併排序 2 線性時間非比較類排序 計數排序 基數排序和桶排序。總結 1 在比較類排序中...

十種軟體濾波方法

十種軟體濾波方法 1 限幅濾波法 a 方法 根據經驗判斷,確定兩次取樣允許的最大偏差值 設為a 每次檢測到新值時判斷 如果本次值與上次值之差 a value new value a return value return new value 2 中位值濾波法 a 方法 連續取樣n次 n取奇數 把n次...