日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

排序算法 —— 计数排序

發布時間:2025/3/12 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法 —— 计数排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

計數排序是桶排序思想的一種具體實現,針對一些具有特殊限制的樣本數據,如公司員工年齡,那么樣本數據本身就一定在0~200之間,針對這樣的數據,使用從0到200 的桶數組,桶的位置已經是有序的,只需要將對應年齡的數據放入對應的桶,比如,24歲的員工有10人,那么就往 24 號桶中放10個數據。將所有員工年齡數據放入桶數組中后,只需要再次將它們放回到原數組就可以實現排序了:

一、代碼實現

public static void countSort(int[] arr) {if (arr == null || arr.length < 2)return;// 找到數組中的最大值int max = Integer.MIN_VALUE;for (int i = 0; i < arr.length; i++) {max = Math.max(max, arr[i]);}// 為了能夠覆蓋到最后一個值,需要+1int[] buckets = new int[max + 1];// 桶的下標記錄數據,桶中的元素記錄數據數量for (int i = 0; i < arr.length; i++) {buckets[arr[i]]++;}int i = 0;// 循環桶數組for (int j = 0; j < buckets.length; j++) {// 如果桶中有元素,那么執行放回操作,并遞減,直到取出所有元素while (buckets[j]-- > 0) {// 桶下標代表數據本身,因此直接以下標作為返回的數據arr[i++] = j;}}}

二、計數排序的時間復雜度

計數排序是多個循環操作的累加。

首先是遍歷數組,求得一個最大值,來決定桶的個數,時間復雜度是O(N);

然后是將所有元素計數到輔助的桶數組中,時間復雜度是O(N);

隨后,通過遍歷桶數組,選出存有數據的桶,并依次取出累計個數的元素并返回到原數組中,雖然for循環嵌套了while循環,但實際上while只是把桶中的元素全部取出,其for + while操作的次數一定等于元素個數N,因此時間復雜度同樣是O(N)。

所以,最后得出計數排序的時間復雜度是 O(N) + O(N) + O(N) = O(3N) 忽略倍數即為 O(N)。

?

?

?

總結

以上是生活随笔為你收集整理的排序算法 —— 计数排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。