選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,而氣泡排序、插入排序、歸併排序、計數排序(注意倒著插入)、桶排序和基數排序是穩定的排序演算法
冒泡、選擇、插入、歸併、希爾、堆排序都是基於比較的排序
平均時間複雜度最低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次...