新四季網

桶排序與堆排序(計數排序桶排序)

2023-05-02 09:57:45

7.計數排序(Counting Sort)

計數排序不是基於比較的排序算法,其核心在於將輸入的數據值轉化為鍵存儲在額外開闢的數組空間中。 作為一種線性時間複雜度的排序O(n),計數排序要求輸入的數據必須是有確定範圍的整數。(直方圖統計,再按照順序扔出來)

7.1 算法描述

找出待排序的數組中最大和最小的元素;

統計數組中每個值為i的元素出現的次數,存入數組C的第i項;

對所有的計數累加(從C中的第一個元素開始,每一項和前一項相加);

反向填充目標數組:將每個元素i放在新數組的第C(i)項,每放一個元素就將C(i)減去1。

7.2 動圖演示

代碼實現:

void countingSort(int a[], int len){ if (!a || len <= 0) return; //通過max和min計算出臨時數組所需要開闢的空間大小 int max = a[0], min = a[0]; for (int i = 0; i max) max = a[i]; if (a[i] < min) min = a[i]; } //分配臨時數組,使用calloc將數組都初始化為0 int range = max - min 1; int *b = (int *)calloc(range, sizeof(int)); //使用臨時數組記錄原始數組中每個數的個數 for (int i = 0; i < len; i ) b[a[i] - min] = 1; //注意:這裡在存儲上要在原始數組數值上減去min才不會出現越界問題 int j = 0; //根據統計結果,重新對元素進行回收 for (int i = 0; i = right) return; int l = left; int r = right; int key = arr[l]; while (l l && arr[r] > key) r--; arr[l] = arr[r]; while (l < r && arr[l] < key) l ; arr[r] = arr[l]; } arr[l] = key; quickSort(arr, left, l - 1); quickSort(arr, l 1, right);}//定義一個桶的結構體,也可以使用鍊表等其他實現方法struct bucket { int node[10]; int count; //數據個數};void bucketSort(int a[], int len){ if (!a || len <= 0) return; int max = a[0], min = a[0]; for (int i = 1; i max) max = a[i]; if (a[i] < min) min = a[i]; } int num = (max - min 1) / 10 1; struct bucket *pBucket = (struct bucket*)calloc(num, sizeof(struct bucket)); //將a[i]放進對應的桶中 for (int i = 0; i node[(pBucket k)->count] = a[i]; (pBucket k)->count ; } int pos = 0; for (int i = 0; i node, 0, (pBucket i)->count - 1);//使用快速排序對每個桶中的數進行排序,當然你可以使用任意一種排序 for (int j = 0; j count; j ) { a[pos ] = (pBucket i)->node[j]; } } free(pBucket);}

桶排序最好情況下使用線性時間O(n),桶排序的時間複雜度,取決於對各個桶之間數據進行排序的時間複雜度,因為其它部分的時間複雜度都為O(n)。很顯然,桶劃分的越小,各個桶之間的數據越少,排序所用的時間也會越少。但相應的空間消耗就會增大。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了