亚洲国产第一站精品蜜芽_亚洲AV无码精品色午夜果冻不卡_国产香蕉九九久久精品免费_国产精品亚洲专区无码不卡

更多精彩內(nèi)容,歡迎關(guān)注:

視頻號(hào)
視頻號(hào)

抖音
抖音

快手
快手

微博
微博

c語言計(jì)數(shù)排序算法

文檔

c語言計(jì)數(shù)排序算法

計(jì)數(shù)排序的核心在于將輸入的數(shù)據(jù)值轉(zhuǎn)化為鍵存儲(chǔ)在額外開辟的數(shù)組空間中。作為一種線性時(shí)間復(fù)雜度的排序,計(jì)數(shù)排序要求輸入的數(shù)據(jù)必須是有確定范圍的整數(shù)。
推薦度:
導(dǎo)讀計(jì)數(shù)排序的核心在于將輸入的數(shù)據(jù)值轉(zhuǎn)化為鍵存儲(chǔ)在額外開辟的數(shù)組空間中。作為一種線性時(shí)間復(fù)雜度的排序,計(jì)數(shù)排序要求輸入的數(shù)據(jù)必須是有確定范圍的整數(shù)。
.example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:"courier new"}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px}

排序算法是《數(shù)據(jù)結(jié)構(gòu)與算法》中最基本的算法之一。排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。以下是計(jì)數(shù)排序算法:

計(jì)數(shù)排序的核心在于將輸入的數(shù)據(jù)值轉(zhuǎn)化為鍵存儲(chǔ)在額外開辟的數(shù)組空間中。作為一種線性時(shí)間復(fù)雜度的排序,計(jì)數(shù)排序要求輸入的數(shù)據(jù)必須是有確定范圍的整數(shù)。

1. 計(jì)數(shù)排序的特征

當(dāng)輸入的元素是 n 個(gè) 0 到 k 之間的整數(shù)時(shí),它的運(yùn)行時(shí)間是 Θ(n + k)。計(jì)數(shù)排序不是比較排序,排序的速度快于任何比較排序算法。

由于用來計(jì)數(shù)的數(shù)組C的長度取決于待排序數(shù)組中數(shù)據(jù)的范圍(等于待排序數(shù)組的最大值與最小值的差加上1),這使得計(jì)數(shù)排序?qū)τ跀?shù)據(jù)范圍很大的數(shù)組,需要大量時(shí)間和內(nèi)存。例如:計(jì)數(shù)排序是用來排序0到100之間的數(shù)字的最好的算法,但是它不適合按字母順序排序人名。但是,計(jì)數(shù)排序可以用在基數(shù)排序中的算法來排序數(shù)據(jù)范圍很大的數(shù)組。

通俗地理解,例如有 10 個(gè)年齡不同的人,統(tǒng)計(jì)出有 8 個(gè)人的年齡比 A 小,那 A 的年齡就排在第 9 位,用這個(gè)方法可以得到其他每個(gè)人的位置,也就排好了序。當(dāng)然,年齡有重復(fù)時(shí)需要特殊處理(保證穩(wěn)定性),這就是為什么最后要反向填充目標(biāo)數(shù)組,以及將每個(gè)數(shù)字的統(tǒng)計(jì)減去 1 的原因。

?算法的步驟如下:

(1)找出待排序的數(shù)組中最大和最小的元素(2)統(tǒng)計(jì)數(shù)組中每個(gè)值為i的元素出現(xiàn)的次數(shù),存入數(shù)組C的第i項(xiàng)(3)對(duì)所有的計(jì)數(shù)累加(從C中的第一個(gè)元素開始,每一項(xiàng)和前一項(xiàng)相加)(4)反向填充目標(biāo)數(shù)組:將每個(gè)元素i放在新數(shù)組的第C(i)項(xiàng),每放一個(gè)元素就將C(i)減去12. 動(dòng)圖演示

代碼實(shí)現(xiàn)JavaScript 實(shí)例 function countingSort(arr, maxValue) {? ? var bucket = new Array(maxValue+1),? ? ? ? sortedIndex = 0;? ? ? ? arrLen = arr.length,? ? ? ? bucketLen = maxValue + 1;? ? for (var i = 0; i < arrLen; i++) {? ? ? ? if (!bucket[arr[i]]) {? ? ? ? ? ? bucket[arr[i]] = 0;? ? ? ? }? ? ? ? bucket[arr[i]]++;? ? }? ? for (var j = 0; j < bucketLen; j++) {? ? ? ? while(bucket[j] > 0) {? ? ? ? ? ? arr[sortedIndex++] = j;? ? ? ? ? ? bucket[j]--;? ? ? ? }? ? }? ? return arr;}Python實(shí)例 def countingSort(arr, maxValue):? ? bucketLen = maxValue+1? ? bucket = [0]*bucketLen? ? sortedIndex =0? ? arrLen = len(arr)? ? for i in range(arrLen):? ? ? ? if not bucket[arr[i]]:? ? ? ? ? ? bucket[arr[i]]=0? ? ? ? bucket[arr[i]]+=1? ? for j in range(bucketLen):? ? ? ? while bucket[j]>0:? ? ? ? ? ? arr[sortedIndex] = j? ? ? ? ? ? sortedIndex+=1? ? ? ? ? ? bucket[j]-=1? ? return arrGo實(shí)例 func countingSort(arr []int, maxValue int) []int {? ? ? ? bucketLen := maxValue + 1? ? ? ? bucket := make([]int, bucketLen) // 初始為0的數(shù)組? ? ? ? sortedIndex := 0? ? ? ? length := len(arr)? ? ? ? for i := 0; i < length; i++ {? ? ? ? ? ? ? ? bucket[arr[i]] += 1? ? ? ? }? ? ? ? for j := 0; j < bucketLen; j++ {? ? ? ? ? ? ? ? for bucket[j] > 0 {? ? ? ? ? ? ? ? ? ? ? ? arr[sortedIndex] = j? ? ? ? ? ? ? ? ? ? ? ? sortedIndex += 1? ? ? ? ? ? ? ? ? ? ? ? bucket[j] -= 1? ? ? ? ? ? ? ? }? ? ? ? }? ? ? ? return arr}Java實(shí)例 public class CountingSort implements IArraySort {? ? @Override? ? public int[] sort(int[] sourceArray) throws Exception {? ? ? ? // 對(duì) arr 進(jìn)行拷貝,不改變參數(shù)內(nèi)容? ? ? ? int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);? ? ? ? int maxValue = getMaxValue(arr);? ? ? ? return countingSort(arr, maxValue);? ? }? ? private int[] countingSort(int[] arr, int maxValue) {? ? ? ? int bucketLen = maxValue + 1;? ? ? ? int[] bucket = new int[bucketLen];? ? ? ? for (int value : arr) {? ? ? ? ? ? bucket[value]++;? ? ? ? }? ? ? ? int sortedIndex = 0;? ? ? ? for (int j = 0; j < bucketLen; j++) {? ? ? ? ? ? while (bucket[j] > 0) {? ? ? ? ? ? ? ? arr[sortedIndex++] = j;? ? ? ? ? ? ? ? bucket[j]--;? ? ? ? ? ? }? ? ? ? }? ? ? ? return arr;? ? }? ? private int getMaxValue(int[] arr) {? ? ? ? int maxValue = arr[0];? ? ? ? for (int value : arr) {? ? ? ? ? ? if (maxValue < value) {? ? ? ? ? ? ? ? maxValue = value;? ? ? ? ? ? }? ? ? ? }? ? ? ? return maxValue;? ? }}PHP實(shí)例 function countingSort($arr, $maxValue = null){? ? if ($maxValue === null) {? ? ? ? $maxValue = max($arr);? ? }? ? for ($m = 0; $m < $maxValue + 1; $m++) {? ? ? ? $bucket[] = null;? ? }? ? $arrLen = count($arr);? ? for ($i = 0; $i < $arrLen; $i++) {? ? ? ? if (!array_key_exists($arr[$i], $bucket)) {? ? ? ? ? ? $bucket[$arr[$i]] = 0;? ? ? ? }? ? ? ? $bucket[$arr[$i]]++;? ? }? ? $sortedIndex = 0;? ? foreach ($bucket as $key => $len) {? ? ? ? ? ? ? ? if($len !== null){? ? ? ? ? ? for($j = 0; $j < $len; $j++){? ? ? ? ? ? ? ? $arr[$sortedIndex++] = $key;? ? ? ? ? ? }? ? ? ? }? ? }? ? return $arr;}C實(shí)例 #include #include #include void print_arr(int *arr, int n) {? ? ? ? int i;? ? ? ? printf("%d", arr[0]);? ? ? ? for (i = 1; i < n; i++)? ? ? ? ? ? ? ? printf(" %d", arr[i]);? ? ? ? printf(" ");}void counting_sort(int *ini_arr, int *sorted_arr, int n) {? ? ? ? int *count_arr = (int *) malloc(sizeof(int) * 100);? ? ? ? int i, j, k;? ? ? ? for (k = 0; k < 100; k++)? ? ? ? ? ? ? ? count_arr[k] = 0;? ? ? ? for (i = 0; i < n; i++)? ? ? ? ? ? ? ? count_arr[ini_arr[i]]++;? ? ? ? for (k = 1; k < 100; k++)? ? ? ? ? ? ? ? count_arr[k] += count_arr[k - 1];? ? ? ? for (j = n; j > 0; j--)? ? ? ? ? ? ? ? sorted_arr[--count_arr[ini_arr[j - 1]]] = ini_arr[j - 1];? ? ? ? free(count_arr);}int main(int argc, char **argv) {? ? ? ? int n = 10;? ? ? ? int i;? ? ? ? int *arr = (int *) malloc(sizeof(int) * n);? ? ? ? int *sorted_arr = (int *) malloc(sizeof(int) * n);? ? ? ? srand(time(0));? ? ? ? for (i = 0; i < n; i++)? ? ? ? ? ? ? ? arr[i] = rand() % 100;? ? ? ? printf("ini_array: ");? ? ? ? print_arr(arr, n);? ? ? ? counting_sort(arr, sorted_arr, n);? ? ? ? printf("sorted_array: ");? ? ? ? print_arr(sorted_arr, n);? ? ? ? free(arr);? ? ? ? free(sorted_arr);? ? ? ? return 0;}

參考地址:

https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/8.countingSort.md

https://zh.wikipedia.org/wiki/%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F

以上為計(jì)數(shù)排序算法詳細(xì)介紹,插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等排序算法各有優(yōu)缺點(diǎn),用一張圖概括:

關(guān)于時(shí)間復(fù)雜度

平方階 (O(n2)) 排序 各類簡(jiǎn)單排序:直接插入、直接選擇和冒泡排序。

線性對(duì)數(shù)階 (O(nlog2n)) 排序 快速排序、堆排序和歸并排序;

O(n1+§)) 排序,§ 是介于 0 和 1 之間的常數(shù)。 希爾排序

線性階 (O(n)) 排序 基數(shù)排序,此外還有桶、箱排序。

關(guān)于穩(wěn)定性

穩(wěn)定的排序算法:冒泡排序、插入排序、歸并排序和基數(shù)排序。

不是穩(wěn)定的排序算法:選擇排序、快速排序、希爾排序、堆排序。

名詞解釋:

n:數(shù)據(jù)規(guī)模

k:"桶"的個(gè)數(shù)

In-place:占用常數(shù)內(nèi)存,不占用額外內(nèi)存

Out-place:占用額外內(nèi)存

穩(wěn)定性:排序后 2 個(gè)相等鍵值的順序和排序之前它們的順序相同

文檔

c語言計(jì)數(shù)排序算法

計(jì)數(shù)排序的核心在于將輸入的數(shù)據(jù)值轉(zhuǎn)化為鍵存儲(chǔ)在額外開辟的數(shù)組空間中。作為一種線性時(shí)間復(fù)雜度的排序,計(jì)數(shù)排序要求輸入的數(shù)據(jù)必須是有確定范圍的整數(shù)。
推薦度:
為你推薦
資訊專欄
熱門視頻
相關(guān)推薦
堆排序第一趟怎么求 快速排序c++代碼 有關(guān)動(dòng)物的古詩 歸并排序奇數(shù)個(gè)怎么排 希爾排序法實(shí)例 簡(jiǎn)單選擇排序算法 基數(shù)排序是一種基于 冒泡排序算法是幾層循環(huán) 桶排序思想 計(jì)數(shù)排序 堆排序算法實(shí)現(xiàn) 快速排序算法圖解 與動(dòng)物有關(guān)的古詩 歸并排序是穩(wěn)定排序嗎 希爾排序過程 選擇排序c語言 基數(shù)排序法 冒泡排序法例子 桶排序算法的代碼 計(jì)數(shù)排序算法實(shí)例 桶排序基本算法 c語言冒泡排序法流程圖 基數(shù)排序算法數(shù)據(jù)結(jié)構(gòu) 選擇排序代碼 希爾排序算法vb 歸并排序算法流程圖 描寫燕子的經(jīng)典詩句 踏青詩詞佳句 含有動(dòng)物的古詩 java快速排序簡(jiǎn)單代碼 數(shù)據(jù)結(jié)構(gòu)堆排序例題 計(jì)數(shù)排序c 桶排序算法java java冒泡排序代碼 基數(shù)排序算法代碼 直接選擇排序穩(wěn)定嗎 希爾排序?qū)崿F(xiàn) 歸并排序算法python思想 關(guān)于描寫燕子的詩句 關(guān)于踏青的唯美詩句
Top 亚洲国产第一站精品蜜芽_亚洲AV无码精品色午夜果冻不卡_国产香蕉九九久久精品免费_国产精品亚洲专区无码不卡
<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 欧美日韩调教| 亚洲另类春色国产| 国产精品视频专区| 国产日韩av一区二区| 国产字幕视频一区二区| 亚洲第一精品夜夜躁人人躁| a91a精品视频在线观看| 欧美一区二粉嫩精品国产一线天| 欧美一区二区三区在线看 | 国产精品久久网站| 国产一区自拍视频| 99在线精品视频| 欧美中文字幕在线视频| 欧美激情亚洲| 国产自产高清不卡| 亚洲午夜日本在线观看| 久久在线免费观看视频| 国产精品大片wwwwww| 亚洲国产va精品久久久不卡综合| 亚洲一区免费看| 欧美激情中文不卡| 国内成人精品一区| 亚洲在线观看免费视频| 欧美激情第一页xxx| 国产亚洲欧美一区| 亚洲香蕉成视频在线观看| 欧美成人免费小视频| 国产视频一区三区| 亚洲一区亚洲| 欧美日韩午夜在线| 亚洲老司机av| 麻豆成人在线播放| 国产一区二区三区日韩| 亚洲男人av电影| 欧美日韩综合精品| 亚洲美洲欧洲综合国产一区| 玖玖玖免费嫩草在线影院一区| 亚洲欧洲午夜| 久久久亚洲高清| 在线成人av.com| 欧美在现视频| 国产视频在线观看一区二区| 中文日韩电影网站| 欧美日韩一二三四五区| 99在线精品视频在线观看| 免费亚洲电影| 亚洲黄色一区| 欧美激情精品| 99精品免费视频| 欧美日韩午夜精品| 中文精品一区二区三区| 亚洲一区精彩视频| 国产精品大片免费观看| 亚洲一区二区三区精品视频| 欧美日韩亚洲免费| 中文av一区特黄| 国产精品黄视频| 亚洲欧美成人在线| 国产婷婷色综合av蜜臀av| 欧美在线一级va免费观看| 国产日本欧美在线观看| 久久精品二区三区| 在线观看国产精品网站| 欧美激情一区二区三区| 亚洲乱码国产乱码精品精| 欧美三级资源在线| 欧美亚洲综合久久| 影音先锋久久资源网| 欧美国产日韩免费| 亚洲午夜av| 国内激情久久| 欧美国产日韩xxxxx| 亚洲午夜精品一区二区| 国产亚洲精品aa午夜观看| 另类激情亚洲| 日韩亚洲综合在线| 国产日产欧美a一级在线| 久久免费精品视频| 一区二区三区四区国产精品| 国产精品视频专区| 免费短视频成人日韩| 亚洲最新视频在线播放| 国产偷久久久精品专区| 免费看精品久久片| 亚洲午夜日本在线观看| 黑人极品videos精品欧美裸| 欧美乱大交xxxxx| 欧美在线高清视频| av不卡在线| 黑丝一区二区三区| 欧美体内谢she精2性欧美| 欧美在线免费视屏| 一本色道久久88综合亚洲精品ⅰ | 欧美一二三区精品| 亚洲国产一区二区三区在线播| 国产精品久久网| 蜜桃久久精品乱码一区二区| 亚洲在线网站| 亚洲精品视频二区| 国产综合av| 国产精品免费小视频| 欧美激情成人在线| 久久亚洲风情| 欧美在线看片| 亚洲综合好骚| 9人人澡人人爽人人精品| 性色av一区二区三区红粉影视| 亚洲精品一区二区三区不| 激情av一区二区| 国产精品夜夜夜| 国产精品99免费看| 欧美另类变人与禽xxxxx| 久久一日本道色综合久久| 欧美一区二区三区久久精品茉莉花 | 国产伊人精品| 国产精品日韩二区| 欧美偷拍另类| 欧美激情第3页| 欧美成人免费网站| 欧美va亚洲va国产综合| 最新高清无码专区| 国际精品欧美精品| 国产一区二区在线观看免费| 国产免费成人| 国产日韩精品一区二区| 国产精品日韩一区二区| 国产精品久久久久久久久久直播 | 国产亚洲欧洲| 国产色婷婷国产综合在线理论片a| 国产精品毛片a∨一区二区三区|国 | 国产一区二区三区最好精华液| 国产拍揄自揄精品视频麻豆| 国产精品午夜久久| 国产视频在线观看一区| 国产区二精品视| 国产字幕视频一区二区| 激情亚洲一区二区三区四区| 一色屋精品亚洲香蕉网站| 伊人久久久大香线蕉综合直播| 在线欧美一区| 99精品国产福利在线观看免费 | 国产精品va在线播放| 欧美午夜不卡视频| 国产伦精品一区二区三| 好男人免费精品视频| 亚洲国产小视频| 日韩视频免费观看高清完整版| 一区二区三区视频在线观看| 亚洲一区二区三区在线看| 亚洲欧美日韩国产综合精品二区| 欧美在线观看网站| 久久综合九九| 欧美日韩一二区| 国产精品永久免费在线| 在线观看欧美| 亚洲天堂av在线免费| 久久成人精品视频| 欧美高清视频www夜色资源网| 欧美日韩精品欧美日韩精品一 | 亚洲精品免费一区二区三区| 亚洲无亚洲人成网站77777 | 亚洲无线视频| 久久午夜影视| 亚洲国产成人久久综合| 在线视频日本亚洲性| 久久九九国产精品| 欧美日韩精品免费观看| 国内外成人免费视频| 亚洲毛片av在线| 久久久精品日韩欧美| 欧美日韩一区二区三区四区在线观看| 国产欧美一区二区三区国产幕精品| 黄色亚洲在线| 亚洲欧美国产77777| 欧美福利专区| 国语自产精品视频在线看一大j8 | 久久久www免费人成黑人精品| 欧美日韩成人在线播放| 黑人巨大精品欧美一区二区| 一区二区三区久久| 欧美aⅴ一区二区三区视频| 国产精品一区视频| 日韩午夜av在线| 麻豆亚洲精品| 国产亚洲精品久久飘花| 中文成人激情娱乐网| 欧美aaa级| 永久域名在线精品| 久久激情婷婷| 国产精品免费网站在线观看| av成人天堂| 欧美日韩国产一级片| 亚洲国产日韩在线一区模特| 久久国产精品99精品国产| 国产精品一区二区久久久久| 一区二区三欧美| 欧美日韩精品免费看 | 日韩视频不卡| 欧美大片91| 亚洲人被黑人高潮完整版|