国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基數排序是怎么排的_基數排序詳細過程

lhl545545 ? 來源:電子發燒友網 ? 2018-02-05 14:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

計數排序

學習基數排序之前首先學習計數排序。

計數排序假設每個元素都是在0到k之間的一個整數。

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

計數排序的算法用偽代碼描述為:

COUNTING-SORT(A,k)

// 初始化數組C

for i=0 to k

C[i]=0

// 統計A[j]元素出現的次數,保存到C數組中

for j=0 to A.length

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

// 統計小于等于A[j]元素的個數

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數組中,都要將C[A[j]]的值減一,這樣當遇到下一個值等于A[j]的元素時,該元素就能放在輸出數組中A[j]的前面。

計數排序的詳細過程如下

基數排序是怎么排的_基數排序詳細過程

計數排序的關鍵代碼如下

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;

}

計數排序的性能

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

同時,計數排序也是一種穩定的排序算法。

基數排序

基數排序最初是用在打孔卡片制表機上的一種排序算法,由Herman Hollerith發明,也就是IBM的創始人。

基數排序從最低為開始來排序的,從低位到高位,按位排序,按位排序必須是穩定的。

基數排序的詳細過程

基數排序是怎么排的_基數排序詳細過程

基數排序算法描述

RADIX-SORT(A,d)

for i=1 to d

use a stable sort to sort arrat A on digit i

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

基數排序的關鍵代碼,這里以數組排序時按照十進制每位進行比較。

/**

* 基數排序

* @param result 最終已排序的數組,共用一個節省空間

* @param maxLen 待排序的數組中最大的位數

*/

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

int flag = 1;

// 保存每輪要排序的位對應數組a的值

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

for(int i=0; i

// 共比較的輪數

flag *= 10;

// b數組中對應的裝著a數組中每位的數,第一輪裝著各位,第二輪裝著十位數。。.

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

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

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

}

countSort(a, digitArr,result,10);

// 每一輪計數排序完后刷新下一輪要排序的數組

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

}

}

調用計數排序的函數

/**

* 計數排序 :對數組a中的元素按某些位排序

* @param tmp 要參與排序的當前位的值保存在tmp中

* @param result 每次計數排序后的新的數組順序

*/

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--) {

// 和計數排序唯一的差別在于賦值的時候用真實的數據

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

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

}

}

基數排序的性能

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

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

在此基礎上,從2^r進制來看,此時k為2^r,并且一個b位數要比較b/r輪。于是我們得到T(n)=O((b/r)(n+2^r))

對上式求導可得其最小值。此時r=lgn,此時T(n)=O((b/lgn)n),如果再取b=lgn,這時就能達到最少的運行時間,時間復雜度為T(n)=O(n)

基數排序也是穩定的排序算法

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    MAX16050/MAX16051:電壓監測與排序電路的理想選擇

    MAX16050/MAX16051:電壓監測與排序電路的理想選擇 在電子設計領域,對于電壓監測和電源排序的需求日益增長,特別是在服務器、工作站、網絡系統等復雜設備中。今天,我們就來深入探討
    的頭像 發表于 03-02 09:15 ?57次閱讀

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

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

    ADM6819/ADM6820:簡單電源排序器的技術剖析與應用指南

    ,為多電源系統的設計提供了有效的解決方案。下面我們就來詳細了解這兩款器件。 文件下載: ADM6819.pdf 一、特性亮點 1. 單芯片實現雙電源排序 ADM6819/ADM6820能夠在單芯片上實現
    的頭像 發表于 02-28 14:25 ?116次閱讀

    探秘ADM1186:高效電壓監測與排序芯片的應用指南

    探秘ADM1186:高效電壓監測與排序芯片的應用指南 在電子工程師的日常工作中,電源管理是一個至關重要的環節。良好的電源管理不僅能確保設備的穩定運行,還能提高系統的可靠性和性能。今天,我們就來深入
    的頭像 發表于 02-28 14:25 ?130次閱讀

    ADM1066:多功能電源監控與排序芯片的深度解析

    ADM1066:多功能電源監控與排序芯片的深度解析 在電子設備的設計中,電源的監控與排序是確保系統穩定運行的關鍵環節。ADM1066作為一款功能強大的電源監控與排序芯片,為多電源系統提供了全面
    的頭像 發表于 02-28 14:05 ?73次閱讀

    ADM1068:多功能電源監控與排序芯片的深度解析

    ADM1068:多功能電源監控與排序芯片的深度解析 在電子系統設計中,電源的監控與排序至關重要,它直接關系到系統的穩定性和可靠性。今天,我們就來深入探討一款功能強大的電源監控與排序芯片
    的頭像 發表于 02-28 14:05 ?77次閱讀

    LTC2937:六通道電源排序器與電壓監控器的設計與應用

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

    ADM1169:多電源系統的監控與排序解決方案

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

    ADM1166:多電源系統監控與排序的理想解決方案

    解決方案。下面我們來詳細了解一下這款芯片。 文件下載: ADM1166.pdf 一、ADM1166的特性亮點 1. 全面的電源監控與排序 ADM1166能對多達10個電源進行監控和排序,為系統提供了強大的電源管理能力。其10個電
    的頭像 發表于 02-28 11:10 ?129次閱讀

    探索LM3880:三軌簡單電源排序器的卓越性能與應用

    探索LM3880:三軌簡單電源排序器的卓越性能與應用 在電子設計領域,電源管理是一個至關重要的環節。今天,我們將深入探討德州儀器(TI)推出的LM3880三軌簡單電源排序器,它為多電壓軌的電源排序
    的頭像 發表于 02-26 17:20 ?493次閱讀

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

    問題提供了強大而靈活的解決方案。本文將深入探討UCD9090A的特性、應用、詳細功能以及設計要點。 文件下載: ucd9090a.pdf 一、UCD9090A的特性亮點 1. 多軌監控與排序
    的頭像 發表于 02-26 16:25 ?75次閱讀

    MAX16050/MAX16051:具備反向排序功能的電壓監控與排序電路

    MAX16050/MAX16051:具備反向排序功能的電壓監控與排序電路 在電子系統設計中,對電源電壓的精確監控和有序控制至關重要。Maxim Integrated推出的MAX16050
    的頭像 發表于 01-31 17:15 ?780次閱讀

    C語言插入排序算法和代碼

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

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

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

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

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