算法-排序-计数排序(包含对非负数和整数的排序)
生活随笔
收集整理的這篇文章主要介紹了
算法-排序-计数排序(包含对非负数和整数的排序)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
計數排序
時間復雜度O(n)
特點:穩定
限制:對0到maximum中的數進行排序
maximum要求,比數組中最大值大或者相等
有拓展版本的計數排序(在文章基數排序內)
基數排序鏈接
拓展版本1??
帶Key版本,缺點只能對Key為非負數排序
2??優化版本,對任意正整數排序
void counting_sort_by_key(vector<KeyValuePair>& array,int key_minimum = - 9,int key_maximum = 9); void counting_sort_by_key(vector<KeyValuePair>& array,int key_minimum,int key_maximum) {int inverter_count = key_maximum - key_minimum + 1;int *count_array = new int[inverter_count];for (int i = 0; i < inverter_count; ++i) {count_array[i] = 0;}for (int i = 0; i < array.size(); ++i) {count_array[array[i].key - key_minimum] = count_array[array[i].key - key_minimum] + 1;}for (int i = 1; i < inverter_count; ++i) {count_array[i] = count_array[i] + count_array[i-1];}vector<KeyValuePair> temp_array(array.size());for (int i = array.size() - 1; i >=0 ; --i) {temp_array[count_array[array[i].key - key_minimum]-1] = array[i];count_array[array[i].key - key_minimum] = count_array[array[i].key - key_minimum] - 1;}for (int i = 0; i < array.size(); ++i) {array[i] = temp_array[i];}delete [] count_array; }輔助類:KeyValuePair
鏈接地址
總結
以上是生活随笔為你收集整理的算法-排序-计数排序(包含对非负数和整数的排序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivo WATCH 3 智能手表今日开
- 下一篇: 在O(1)的时间内计算n个整数落在区间[