91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基數(shù)排序是怎么排的_基數(shù)排序詳細(xì)過(guò)程

lhl545545 ? 來(lái)源:電子發(fā)燒友網(wǎng) ? 2018-02-05 14:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

計(jì)數(shù)排序

學(xué)習(xí)基數(shù)排序之前首先學(xué)習(xí)計(jì)數(shù)排序。

計(jì)數(shù)排序假設(shè)每個(gè)元素都是在0到k之間的一個(gè)整數(shù)。

基數(shù)排序的基本思想,對(duì)于每個(gè)元素x,如果我們知道了小于x的元素的個(gè)數(shù),就可以確定輸出數(shù)組中元素x的位置,那么直接將元素x放到輸出數(shù)組中。比如有3小于x的元素,那在輸出數(shù)組中,x肯定位于第4個(gè)位置。

計(jì)數(shù)排序的算法用偽代碼描述為:

COUNTING-SORT(A,k)

// 初始化數(shù)組C

for i=0 to k

C[i]=0

// 統(tǒng)計(jì)A[j]元素出現(xiàn)的次數(shù),保存到C數(shù)組中

for j=0 to A.length

C[A[j]]=C[A[j]]+1

// 統(tǒng)計(jì)小于等于A[j]元素的個(gè)數(shù)

for k=0 to k

C[K]=C[K-1]+C[K]

// 將A中的元素放在B中正確的位置

for i=A.length to 0

B[C[A[i]]-1]=A[i]

C[A[i]]=C[A[i]]-1

注:由于有可能有相同元素存在,所以,每次將A[i]元素放入B數(shù)組中,都要將C[A[j]]的值減一,這樣當(dāng)遇到下一個(gè)值等于A[j]的元素時(shí),該元素就能放在輸出數(shù)組中A[j]的前面。

計(jì)數(shù)排序的詳細(xì)過(guò)程如下

基數(shù)排序是怎么排的_基數(shù)排序詳細(xì)過(guò)程

計(jì)數(shù)排序的關(guān)鍵代碼如下

public int[] countSort(int a[], int k) {

int[] b = new int[a.length];

int[] c = new int[k];

for (int i = 0; i

c[i] = 0;

}

for (int i = 0; i

c[a[i]] += 1;

}

for (int i = 0; i

if (i != 0) {

c[i] += c[i - 1];

}

}

for (int i = a.length - 1; i >= 0; i--) {

b[c[a[i]] - 1] = a[i];

c[a[i]] = c[a[i]] - 1;

}

return b;

}

計(jì)數(shù)排序的性能

很容易得到計(jì)數(shù)排序的時(shí)間復(fù)雜度為:T(n)=O(k+n),因此當(dāng)k小于等于n,也就是當(dāng)k=O(n),k和n同階時(shí),采用計(jì)數(shù)排序的時(shí)間復(fù)雜度為T(n)=O(n)

同時(shí),計(jì)數(shù)排序也是一種穩(wěn)定的排序算法。

基數(shù)排序

基數(shù)排序最初是用在打孔卡片制表機(jī)上的一種排序算法,由Herman Hollerith發(fā)明,也就是IBM的創(chuàng)始人。

基數(shù)排序從最低為開始來(lái)排序的,從低位到高位,按位排序,按位排序必須是穩(wěn)定的。

基數(shù)排序的詳細(xì)過(guò)程

基數(shù)排序是怎么排的_基數(shù)排序詳細(xì)過(guò)程

基數(shù)排序算法描述

RADIX-SORT(A,d)

for i=1 to d

use a stable sort to sort arrat A on digit i

在這里我們選擇計(jì)數(shù)排序??紤]常規(guī)情況,對(duì)[0.。.9]之間的數(shù)排序,k=10,且一般有k<

基數(shù)排序的關(guān)鍵代碼,這里以數(shù)組排序時(shí)按照十進(jìn)制每位進(jìn)行比較。

/**

* 基數(shù)排序

* @param result 最終已排序的數(shù)組,共用一個(gè)節(jié)省空間

* @param maxLen 待排序的數(shù)組中最大的位數(shù)

*/

public static void radixSort(int[] a,int[] result, int maxLen) {

int flag = 1;

// 保存每輪要排序的位對(duì)應(yīng)數(shù)組a的值

int [] digitArr = new int[a.length];

for(int i=0; i

// 共比較的輪數(shù)

flag *= 10;

// b數(shù)組中對(duì)應(yīng)的裝著a數(shù)組中每位的數(shù),第一輪裝著各位,第二輪裝著十位數(shù)。。.

for (int j = 0; j < digitArr.length; j++) {

digitArr[j]=a[j]%flag;

digitArr[j]=digitArr[j]/(flag/10);

}

countSort(a, digitArr,result,10);

// 每一輪計(jì)數(shù)排序完后刷新下一輪要排序的數(shù)組

System.arraycopy(result, 0, a, 0,result.length);

}

}

調(diào)用計(jì)數(shù)排序的函數(shù)

/**

* 計(jì)數(shù)排序 :對(duì)數(shù)組a中的元素按某些位排序

* @param tmp 要參與排序的當(dāng)前位的值保存在tmp中

* @param result 每次計(jì)數(shù)排序后的新的數(shù)組順序

*/

public static void countSort(int a[], int tmp[], int result[], int k) {

int[] c = new int[k];

for (int i = 0; i < c.length; i++) {

c[i] = 0;

}

for (int i = 0; i

c[tmp[i]] += 1;

}

for (int i = 0; i < c.length; i++) {

if (i != 0) {

c[i] += c[i - 1];

}

}

for (int i = tmp.length - 1; i >= 0; i--) {

// 和計(jì)數(shù)排序唯一的差別在于賦值的時(shí)候用真實(shí)的數(shù)據(jù)

result[c[tmp[i]] - 1] = a[i];

c[tmp[i]] = c[tmp[i]] - 1;

}

}

基數(shù)排序的性能

如果基數(shù)排序使用的穩(wěn)定排序算法的時(shí)間復(fù)雜度為O(n+k),那么基數(shù)排序的時(shí)間復(fù)雜度為T(n)=O(d(n+k))

很容易理解要循環(huán)d輪,每輪耗時(shí)為O(n+k),于是總的耗時(shí)為O(d(n+k))

在此基礎(chǔ)上,從2^r進(jìn)制來(lái)看,此時(shí)k為2^r,并且一個(gè)b位數(shù)要比較b/r輪。于是我們得到T(n)=O((b/r)(n+2^r))

對(duì)上式求導(dǎo)可得其最小值。此時(shí)r=lgn,此時(shí)T(n)=O((b/lgn)n),如果再取b=lgn,這時(shí)就能達(dá)到最少的運(yùn)行時(shí)間,時(shí)間復(fù)雜度為T(n)=O(n)

基數(shù)排序也是穩(wěn)定的排序算法

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    MAX16050/MAX16051:電壓監(jiān)測(cè)與排序電路的理想選擇

    MAX16050/MAX16051:電壓監(jiān)測(cè)與排序電路的理想選擇 在電子設(shè)計(jì)領(lǐng)域,對(duì)于電壓監(jiān)測(cè)和電源排序的需求日益增長(zhǎng),特別是在服務(wù)器、工作站、網(wǎng)絡(luò)系統(tǒng)等復(fù)雜設(shè)備中。今天,我們就來(lái)深入探討
    的頭像 發(fā)表于 03-02 09:15 ?57次閱讀

    深入解析 LTC2923:電源跟蹤與排序的理想解決方案

    深入解析 LTC2923:電源跟蹤與排序的理想解決方案 在電子設(shè)備的設(shè)計(jì)中,電源的跟蹤和排序至關(guān)重要,它直接影響著設(shè)備的性能和穩(wěn)定性。LTC2923 作為一款強(qiáng)大的電源跟蹤控制器,為我們提供了簡(jiǎn)單
    的頭像 發(fā)表于 02-28 15:35 ?108次閱讀

    ADM6819/ADM6820:簡(jiǎn)單電源排序器的技術(shù)剖析與應(yīng)用指南

    ,為多電源系統(tǒng)的設(shè)計(jì)提供了有效的解決方案。下面我們就來(lái)詳細(xì)了解這兩款器件。 文件下載: ADM6819.pdf 一、特性亮點(diǎn) 1. 單芯片實(shí)現(xiàn)雙電源排序 ADM6819/ADM6820能夠在單芯片上實(shí)現(xiàn)
    的頭像 發(fā)表于 02-28 14:25 ?116次閱讀

    探秘ADM1186:高效電壓監(jiān)測(cè)與排序芯片的應(yīng)用指南

    探秘ADM1186:高效電壓監(jiān)測(cè)與排序芯片的應(yīng)用指南 在電子工程師的日常工作中,電源管理是一個(gè)至關(guān)重要的環(huán)節(jié)。良好的電源管理不僅能確保設(shè)備的穩(wěn)定運(yùn)行,還能提高系統(tǒng)的可靠性和性能。今天,我們就來(lái)深入
    的頭像 發(fā)表于 02-28 14:25 ?130次閱讀

    ADM1066:多功能電源監(jiān)控與排序芯片的深度解析

    ADM1066:多功能電源監(jiān)控與排序芯片的深度解析 在電子設(shè)備的設(shè)計(jì)中,電源的監(jiān)控與排序是確保系統(tǒng)穩(wěn)定運(yùn)行的關(guān)鍵環(huán)節(jié)。ADM1066作為一款功能強(qiáng)大的電源監(jiān)控與排序芯片,為多電源系統(tǒng)提供了全面
    的頭像 發(fā)表于 02-28 14:05 ?73次閱讀

    ADM1068:多功能電源監(jiān)控與排序芯片的深度解析

    ADM1068:多功能電源監(jiān)控與排序芯片的深度解析 在電子系統(tǒng)設(shè)計(jì)中,電源的監(jiān)控與排序至關(guān)重要,它直接關(guān)系到系統(tǒng)的穩(wěn)定性和可靠性。今天,我們就來(lái)深入探討一款功能強(qiáng)大的電源監(jiān)控與排序芯片
    的頭像 發(fā)表于 02-28 14:05 ?77次閱讀

    LTC2937:六通道電源排序器與電壓監(jiān)控器的設(shè)計(jì)與應(yīng)用

    詳細(xì)探討一下 Linear Technology 公司的 LTC2937 可編程六通道電源排序器和電壓監(jiān)控器。 文件下載: LTC2937.pdf 一、LTC2937 概述 LTC2937 是一款
    的頭像 發(fā)表于 02-28 11:15 ?146次閱讀

    ADM1169:多電源系統(tǒng)的監(jiān)控與排序解決方案

    ADM1169:多電源系統(tǒng)的監(jiān)控與排序解決方案 在電子工程師的日常工作中,多電源系統(tǒng)的監(jiān)控與排序是一個(gè)關(guān)鍵且復(fù)雜的問(wèn)題。今天要為大家介紹的Analog Devices的ADM1169 Super
    的頭像 發(fā)表于 02-28 11:10 ?125次閱讀

    ADM1166:多電源系統(tǒng)監(jiān)控與排序的理想解決方案

    解決方案。下面我們來(lái)詳細(xì)了解一下這款芯片。 文件下載: ADM1166.pdf 一、ADM1166的特性亮點(diǎn) 1. 全面的電源監(jiān)控與排序 ADM1166能對(duì)多達(dá)10個(gè)電源進(jìn)行監(jiān)控和排序,為系統(tǒng)提供了強(qiáng)大的電源管理能力。其10個(gè)電
    的頭像 發(fā)表于 02-28 11:10 ?129次閱讀

    探索LM3880:三軌簡(jiǎn)單電源排序器的卓越性能與應(yīng)用

    探索LM3880:三軌簡(jiǎn)單電源排序器的卓越性能與應(yīng)用 在電子設(shè)計(jì)領(lǐng)域,電源管理是一個(gè)至關(guān)重要的環(huán)節(jié)。今天,我們將深入探討德州儀器(TI)推出的LM3880三軌簡(jiǎn)單電源排序器,它為多電壓軌的電源排序
    的頭像 發(fā)表于 02-26 17:20 ?494次閱讀

    德州儀器UCD9090A:10軌電源排序與監(jiān)控的理想之選

    問(wèn)題提供了強(qiáng)大而靈活的解決方案。本文將深入探討UCD9090A的特性、應(yīng)用、詳細(xì)功能以及設(shè)計(jì)要點(diǎn)。 文件下載: ucd9090a.pdf 一、UCD9090A的特性亮點(diǎn) 1. 多軌監(jiān)控與排序
    的頭像 發(fā)表于 02-26 16:25 ?75次閱讀

    MAX16050/MAX16051:具備反向排序功能的電壓監(jiān)控與排序電路

    MAX16050/MAX16051:具備反向排序功能的電壓監(jiān)控與排序電路 在電子系統(tǒng)設(shè)計(jì)中,對(duì)電源電壓的精確監(jiān)控和有序控制至關(guān)重要。Maxim Integrated推出的MAX16050
    的頭像 發(fā)表于 01-31 17:15 ?780次閱讀

    C語(yǔ)言插入排序算法和代碼

    元素都加入排序好數(shù)組。   下面,以對(duì) 3 2 4 1 進(jìn)行選擇排序說(shuō)明插入過(guò)程,使用j記錄元素需要插入的位置。排序目標(biāo)是使數(shù)組從小到大排列。   第1輪   [ 3 ] [ 2
    發(fā)表于 01-15 06:44

    光纖線芯都是按照什么顏色排序

    多次有朋友留言問(wèn)到,光纖熔接顏色如何排序,這個(gè)在實(shí)際應(yīng)用中還是比較多的,那么今天我們就不講原理了,直接用圖文簡(jiǎn)單明了講光纖熔接色譜,大家可以了解下。 一、常規(guī)排序 1、4芯的排序:藍(lán)、橙、綠、棕
    的頭像 發(fā)表于 12-19 11:02 ?1371次閱讀

    低成本電源排序器解決方案

    絕大多數(shù)負(fù)載點(diǎn)DC-DC轉(zhuǎn)換器可以將上一個(gè)轉(zhuǎn)換器的電源就緒輸出連接至下一個(gè)轉(zhuǎn)換器的使能輸入,實(shí)現(xiàn)上電排序。這種方法只適合比較簡(jiǎn)單的設(shè)計(jì),不能滿足多數(shù)現(xiàn)代微處理器和DSP的要求一這類器件要求斷電順序必須與上電順序相反。許多廠商針對(duì)這類應(yīng)用推出了可編程排序IC,但器件價(jià)格較為
    的頭像 發(fā)表于 05-21 09:55 ?1185次閱讀
    低成本電源<b class='flag-5'>排序</b>器解決方案