国产精品亚洲AV三区_国产精品日本一区二区在线播放_国产成人无码久久久精品一_性感美女视频在线观看免费精品

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

視頻號
視頻號

抖音
抖音

快手
快手

微博
微博

基數(shù)排序是什么

文檔

基數(shù)排序是什么

基數(shù)排序是一種非比較型整數(shù)排序算法,其原理是將整數(shù)按位數(shù)切割成不同的數(shù)字,然后按每個位數(shù)分別比較。由于整數(shù)也可以表達(dá)字符串(比如名字或日期)和特定格式的浮點數(shù),所以基數(shù)排序也不是只能使用于整數(shù)。
推薦度:
導(dǎo)讀基數(shù)排序是一種非比較型整數(shù)排序算法,其原理是將整數(shù)按位數(shù)切割成不同的數(shù)字,然后按每個位數(shù)分別比較。由于整數(shù)也可以表達(dá)字符串(比如名字或日期)和特定格式的浮點數(shù),所以基數(shù)排序也不是只能使用于整數(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ù)排序等。以下是基數(shù)排序算法:

基數(shù)排序是一種非比較型整數(shù)排序算法,其原理是將整數(shù)按位數(shù)切割成不同的數(shù)字,然后按每個位數(shù)分別比較。由于整數(shù)也可以表達(dá)字符串(比如名字或日期)和特定格式的浮點數(shù),所以基數(shù)排序也不是只能使用于整數(shù)。

1. 基數(shù)排序 vs 計數(shù)排序 vs 桶排序

基數(shù)排序有兩種方法:

這三種排序算法都利用了桶的概念,但對桶的使用方法上有明顯差異:

基數(shù)排序:根據(jù)鍵值的每位數(shù)字來分配桶;計數(shù)排序:每個桶只存儲單一鍵值;桶排序:每個桶存儲一定范圍的數(shù)值;2. LSD 基數(shù)排序動圖演示

代碼實現(xiàn)JavaScript實例 //LSD Radix Sortvar counter = [];function radixSort(arr, maxDigit) {? ? var mod = 10;? ? var dev = 1;? ? for (var i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {? ? ? ? for(var j = 0; j < arr.length; j++) {? ? ? ? ? ? var bucket = parseInt((arr[j] % mod) / dev);? ? ? ? ? ? if(counter[bucket]==null) {? ? ? ? ? ? ? ? counter[bucket] = [];? ? ? ? ? ? }? ? ? ? ? ? counter[bucket].push(arr[j]);? ? ? ? }? ? ? ? var pos = 0;? ? ? ? for(var j = 0; j < counter.length; j++) {? ? ? ? ? ? var value = null;? ? ? ? ? ? if(counter[j]!=null) {? ? ? ? ? ? ? ? while ((value = counter[j].shift()) != null) {? ? ? ? ? ? ? ? ? ? ? arr[pos++] = value;? ? ? ? ? ? ? ? }? ? ? ? ? }? ? ? ? }? ? }? ? return arr;}Java實例 /**?* 基數(shù)排序?* 考慮負(fù)數(shù)的情況還可以參考: https://code.i-harness.com/zh-CN/q/e98fa9?*/public class RadixSort implements IArraySort {? ? @Override? ? public int[] sort(int[] sourceArray) throws Exception {? ? ? ? // 對 arr 進(jìn)行拷貝,不改變參數(shù)內(nèi)容? ? ? ? int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);? ? ? ? int maxDigit = getMaxDigit(arr);? ? ? ? return radixSort(arr, maxDigit);? ? }? ? /**? ? ?* 獲取最高位數(shù)? ? ?*/? ? private int getMaxDigit(int[] arr) {? ? ? ? int maxValue = getMaxValue(arr);? ? ? ? return getNumLenght(maxValue);? ? }? ? private int getMaxValue(int[] arr) {? ? ? ? int maxValue = arr[0];? ? ? ? for (int value : arr) {? ? ? ? ? ? if (maxValue < value) {? ? ? ? ? ? ? ? maxValue = value;? ? ? ? ? ? }? ? ? ? }? ? ? ? return maxValue;? ? }? ? protected int getNumLenght(long num) {? ? ? ? if (num == 0) {? ? ? ? ? ? return 1;? ? ? ? }? ? ? ? int lenght = 0;? ? ? ? for (long temp = num; temp != 0; temp /= 10) {? ? ? ? ? ? lenght++;? ? ? ? }? ? ? ? return lenght;? ? }? ? private int[] radixSort(int[] arr, int maxDigit) {? ? ? ? int mod = 10;? ? ? ? int dev = 1;? ? ? ? for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {? ? ? ? ? ? // 考慮負(fù)數(shù)的情況,這里擴展一倍隊列數(shù),其中 [0-9]對應(yīng)負(fù)數(shù),[10-19]對應(yīng)正數(shù) (bucket + 10)? ? ? ? ? ? int[][] counter = new int[mod * 2][0];? ? ? ? ? ? for (int j = 0; j < arr.length; j++) {? ? ? ? ? ? ? ? int bucket = ((arr[j] % mod) / dev) + mod;? ? ? ? ? ? ? ? counter[bucket] = arrayAppend(counter[bucket], arr[j]);? ? ? ? ? ? }? ? ? ? ? ? int pos = 0;? ? ? ? ? ? for (int[] bucket : counter) {? ? ? ? ? ? ? ? for (int value : bucket) {? ? ? ? ? ? ? ? ? ? arr[pos++] = value;? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? }? ? ? ? return arr;? ? }? ? /**? ? ?* 自動擴容,并保存數(shù)據(jù)? ? ?*? ? ?* @param arr? ? ?* @param value? ? ?*/? ? private int[] arrayAppend(int[] arr, int value) {? ? ? ? arr = Arrays.copyOf(arr, arr.length + 1);? ? ? ? arr[arr.length - 1] = value;? ? ? ? return arr;? ? }}PHP實例 function radixSort($arr, $maxDigit = null){? ? if ($maxDigit === null) {? ? ? ? $maxDigit = max($arr);? ? }? ? $counter = [];? ? for ($i = 0; $i < $maxDigit; $i++) {? ? ? ? for ($j = 0; $j < count($arr); $j++) {? ? ? ? ? ? preg_match_all('/d/', (string) $arr[$j], $matches);? ? ? ? ? ? $numArr = $matches[0];? ? ? ? ? ? $lenTmp = count($numArr);? ? ? ? ? ? $bucket = array_key_exists($lenTmp - $i - 1, $numArr)? ? ? ? ? ? ? ? ? intval($numArr[$lenTmp - $i - 1])? ? ? ? ? ? ? ? : 0;? ? ? ? ? ? if (!array_key_exists($bucket, $counter)) {? ? ? ? ? ? ? ? $counter[$bucket] = [];? ? ? ? ? ? }? ? ? ? ? ? $counter[$bucket][] = $arr[$j];? ? ? ? }? ? ? ? $pos = 0;? ? ? ? for ($j = 0; $j < count($counter); $j++) {? ? ? ? ? ? $value = null;? ? ? ? ? ? if ($counter[$j] !== null) {? ? ? ? ? ? ? ? while (($value = array_shift($counter[$j])) !== null) {? ? ? ? ? ? ? ? ? ? $arr[$pos++] = $value;? ? ? ? ? ? ? ? }? ? ? ? ? }? ? ? ? }? ? }? ? return $arr;}C++實例 int maxbit(int data[], int n) //輔助函數(shù),求數(shù)據(jù)的最大位數(shù){? ? int maxData = data[0];? ? ? ? ? ? ? ///< 最大數(shù)? ? /// 先求出最大數(shù),再求其位數(shù),這樣有原先依次每個數(shù)判斷其位數(shù),稍微優(yōu)化點。? ? for (int i = 1; i < n; ++i)? ? {? ? ? ? if (maxData < data[i])? ? ? ? ? ? maxData = data[i];? ? }? ? int d = 1;? ? int p = 10;? ? while (maxData >= p)? ? {? ? ? ? //p *= 10; // Maybe overflow? ? ? ? maxData /= 10;? ? ? ? ++d;? ? }? ? return d;/* ? ?int d = 1; //保存最大的位數(shù)? ? int p = 10;? ? for(int i = 0; i < n; ++i)? ? {? ? ? ? while(data[i] >= p)? ? ? ? {? ? ? ? ? ? p *= 10;? ? ? ? ? ? ++d;? ? ? ? }? ? }? ? return d;*/}void radixsort(int data[], int n) //基數(shù)排序{? ? int d = maxbit(data, n);? ? int *tmp = new int[n];? ? int *count = new int[10]; //計數(shù)器? ? int i, j, k;? ? int radix = 1;? ? for(i = 1; i <= d; i++) //進(jìn)行d次排序? ? {? ? ? ? for(j = 0; j < 10; j++)? ? ? ? ? ? count[j] = 0; //每次分配前清空計數(shù)器? ? ? ? for(j = 0; j < n; j++)? ? ? ? {? ? ? ? ? ? k = (data[j] / radix) % 10; //統(tǒng)計每個桶中的記錄數(shù)? ? ? ? ? ? count[k]++;? ? ? ? }? ? ? ? for(j = 1; j < 10; j++)? ? ? ? ? ? count[j] = count[j - 1] + count[j]; //將tmp中的位置依次分配給每個桶? ? ? ? for(j = n - 1; j >= 0; j--) //將所有桶中記錄依次收集到tmp中? ? ? ? {? ? ? ? ? ? k = (data[j] / radix) % 10;? ? ? ? ? ? tmp[count[k] - 1] = data[j];? ? ? ? ? ? count[k]--;? ? ? ? }? ? ? ? for(j = 0; j < n; j++) //將臨時數(shù)組的內(nèi)容復(fù)制到data中? ? ? ? ? ? data[j] = tmp[j];? ? ? ? radix = radix * 10;? ? }? ? delete []tmp;? ? delete []count;}C實例 #include#define MAX 20//#define SHOWPASS#define BASE 10void print(int *a, int n) {? int i;? for (i = 0; i < n; i++) {? ? printf("%d ", a[i]);? }}void radixsort(int *a, int n) {? int i, b[MAX], m = a[0], exp = 1;? for (i = 1; i < n; i++) {? ? if (a[i] > m) {? ? ? m = a[i];? ? }? }? while (m / exp > 0) {? ? int bucket[BASE] = { 0 };? ? for (i = 0; i < n; i++) {? ? ? bucket[(a[i] / exp) % BASE]++;? ? }? ? for (i = 1; i < BASE; i++) {? ? ? bucket[i] += bucket[i - 1];? ? }? ? for (i = n - 1; i >= 0; i--) {? ? ? b[--bucket[(a[i] / exp) % BASE]] = a[i];? ? }? ? for (i = 0; i < n; i++) {? ? ? a[i] = b[i];? ? }? ? exp *= BASE;#ifdef SHOWPASS? ? printf(" PASS ? : ");? ? print(a, n);#endif? }}int main() {? int arr[MAX];? int i, n;? printf("Enter total elements (n <= %d) : ", MAX);? scanf("%d", &n);? n = n < MAX ? n : MAX;? printf("Enter %d Elements : ", n);? for (i = 0; i < n; i++) {? ? scanf("%d", &arr[i]);? }? printf(" ARRAY ?: ");? print(&arr[0], n);? radixsort(&arr[0], n);? printf(" SORTED : ");? print(&arr[0], n);? printf(" ");? return 0;}Lua實例 -- 獲取表中位數(shù)local maxBit = function (tt)? ? local weight = 10; ? ? ?-- 十進(jìn)制? ? local bit = 1;? ? ? ? for k, v in pairs(tt) do? ? ? ? while v >= weight do? ? ? ? ? ? weight = weight * 10;? ? ? ? ? ? bit = bit + 1; ?? ? ? ? end? ? end? ? return bit;end-- 基數(shù)排序local radixSort = function (tt)? ? local maxbit = maxBit(tt); ? ? local bucket = {};? ? local temp = {};? ? local radix = 1;? ? for i = 1, maxbit do? ? ? ? for j = 1, 10 do? ? ? ? ? ? bucket[j] = 0; ? ? ?--- 清空桶? ? ? ? end? ? ? ? for k, v in pairs(tt) do? ? ? ? ? ? local remainder = math.floor((v / radix)) % 10 + 1; ? ?? ? ? ? ? ? bucket[remainder] = bucket[remainder] + 1; ? ? ?-- 每個桶數(shù)量自動增加1? ? ? ? end? ? ? ? ? ? ? ? for j = 2, 10 do? ? ? ? ? ? bucket[j] = bucket[j - 1] + bucket[j]; ?-- 每個桶的數(shù)量 = 以前桶數(shù)量和 + 自個數(shù)量? ? ? ? end ? ? ? ? -- 按照桶的位置,排序--這個是桶式排序,必須使用倒序,因為排序方法是從小到大,順序下來,會出現(xiàn)大的在小的上面清空。? ? ? ? for k = #tt, 1, -1 do? ? ? ? ? ? local remainder = math.floor((tt[k] / radix)) % 10 + 1;? ? ? ? ? ? temp[bucket[remainder]] = tt[k];? ? ? ? ? ? bucket[remainder] = bucket[remainder] - 1;? ? ? ? end? ? ? ? for k, v in pairs(temp) do? ? ? ? ? ? tt[k] = v;? ? ? ? end? ? ? ? radix = radix * 10;? ? endend;

參考地址:

https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/10.radixSort.md

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

以下是熱心網(wǎng)友對基數(shù)排序算法的補充,僅供參考:

熱心網(wǎng)友提供的補充1:

java 代碼里,mod 每次循環(huán)會乘 10,但 counter 的行數(shù)是不需要變的,能包含 [-9,9] 就可以了。

for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
        // 考慮負(fù)數(shù)的情況,這里擴展一倍隊列數(shù),其中 [0-9]對應(yīng)負(fù)數(shù),[10-19]對應(yīng)正數(shù) (bucket + 10)
    int[][] counter = new int[20][0];

    for (int j = 0; j < arr.length; j++) {
        int bucket = ((arr[j] % mod) / dev) + 10;
        counter[bucket] = arrayAppend(counter[bucket], arr[j]);
    }

    int pos = 0;
    for (int[] bucket : counter) {
        for (int value : bucket) {
            arr[pos++] = value;
        }
    }
}

熱心網(wǎng)友提供的補充2:

艾孜爾江補充使用C#基數(shù)排序算法如下:

///基數(shù)排序
static void RadixSort(List list)
{
    int maxValue = list.Max();//列表內(nèi)部方法拿過來用用(在Linq中)
    int it = 0;//需要幾趟
                //maxvalue 9-1 99-2 999-3
                //10^0<=9 10^1>9 it=1
                //10^0<99 10^1<99 10^2>99 it=2
    while (Math.Pow(10, it) <= maxValue)
    {
        List> buckets = new List>(10);//分10個桶對應(yīng)0-9
        for (int i = 0; i < 10; i++)
        {
            buckets.Add(new List());
        }//列表初始化大小
        for (int i = 0; i < list.Count; i++)//入桶
        {
            //989 it=0 989/10^it=989 989%10=9;
            int digit = (int)((list[i]) / (Math.Pow(10, it)) % 10);//得到對應(yīng)桶
            buckets[digit].Add(list[i]);
        }//全部入桶
        list.Clear();//依次取出來
        for (int i = 0; i < buckets.Count; i++)
        {
            list.AddRange(buckets[i]);
        }
        it += 1;//繼續(xù)下一次循環(huán)入桶出桶
    }
}

熱心網(wǎng)友提供的補充3:

補充一下python的基數(shù)排序代碼實現(xiàn):

def radix_sort(data):

    if not data:
        return []
    max_num = max(data)  # 獲取當(dāng)前數(shù)列中最大值
    max_digit = len(str(abs(max_num)))  # 獲取最大的位數(shù)

    dev = 1  # 第幾位數(shù),個位數(shù)為1,十位數(shù)為10···
    mod = 10  # 求余數(shù)的除法
    for i in range(max_digit):
        radix_queue = [list() for k in range(mod * 2)]  # 考慮到負(fù)數(shù),我們用兩倍隊列
        for j in range(len(data)):
            radix = int(((data[j] % mod) / dev) + mod)
            radix_queue[radix].append(data[j])

        pos = 0
        for queue in radix_queue:
            for val in queue:
                data[pos] = val
                pos += 1

        dev *= 10
        mod *= 10
    return data

熱心網(wǎng)友提供的補充4:

go 的補一個吧:

// 基數(shù)排序
func RadixSort(arr []int) {
    // 計算最長的數(shù)字
    var (
        maxVal int
        maxLen int
    )
    for _, v := range arr {
        if maxVal < v {
            maxVal = v
        }
    }
    for maxVal > 0 {
        maxLen++
        maxVal /= 10
    }

    // 循環(huán)進(jìn)行數(shù)據(jù)分配與回歸
    var (
        base    = 1           // 取余基數(shù),初始是1,用于取出每個元素的倒數(shù)第 i+1 位的值,計算公式:v / base %10
        buckets = [10][]int{} // 基數(shù)桶,10個
    )
    for i := 0; i < maxLen; i++ { // 遍歷位
        for _, v := range arr { // 遍歷數(shù)組
            d := v / base % 10                 // 每個數(shù)字當(dāng)前位值
            buckets[d] = append(buckets[d], v) // 存入對應(yīng)桶中
        }

        // 將桶中元素還原到arr
        idx := 0
        for x, bucket := range buckets {
            if len(bucket) == 0 {
                continue
            }

            for _, v := range bucket {
                arr[idx] = v
                idx++
            }

            // 桶清空
            buckets[x] = []int{}
        }

        base *= 10 // 基數(shù)*10
    }
}

熱心網(wǎng)友提供的補充5:

補上python的實現(xiàn)代碼:

def radixSort(nums):
    """
    基數(shù)排序,數(shù)組元素必須是正整數(shù)
    >>>nums = [334, 5, 67, 345, 7, 99, 4, 23, 78, 45, 1, 3453, 23424]
    >>>radixSort(nums)
    >>>[1, 4, 5, 7, 23, 45, 67, 78, 99, 334, 345, 3453, 23424]
    """
    #遍歷數(shù)組獲取數(shù)組最大值和最大值對應(yīng)的位數(shù)
    maxValue = nums[0]
    for n in nums:
        maxValue = max(n, maxValue)
    #迭代次數(shù)
    iterCount = len(str(maxValue))
    for i in range(iterCount):
        #定義桶,大小為10,對應(yīng)0-9
        bucket = [[] for _ in range(10)]
        for n in nums:
            index = (n//10**i)%10
            bucket[index].append(n)
        #nums數(shù)組清零,并合并桶內(nèi)元素至nums
        nums.clear()
        for b in bucket:
            nums.extend(b)
        print(nums)
    return nums
nums = [334, 5, 67, 345, 7, 99, 4, 23, 78, 45, 1, 3453, 23424]
radixSort(nums)

熱心網(wǎng)友提供的補充6:

上面 Java 版本有點問題:

for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
    // 考慮負(fù)數(shù)的情況,這里擴展一倍隊列數(shù),其中 [0-9]對應(yīng)負(fù)數(shù),[10-19]對應(yīng)正數(shù) (bucket + 10)
    int[][] counter = new int[mod * 2][0];
....
}

counter 數(shù)組的定義,會隨著 mod 不斷乘 10 變得越來越大。理論上 counter 數(shù)組只需要容量為 20 就可以表示負(fù)數(shù)與正數(shù)的所有數(shù)字字符。

另外,方法 getMaxDigit 計算數(shù)字的最大長度,只考慮到最大值的長度,沒有考慮當(dāng)存在負(fù)數(shù)時,最小值負(fù)數(shù)的字符長度也可能是最大的長度。

更新后的版本:

/** 基數(shù)排序  */
public class RadixSort  {

  public int[] sort(int[] arr) {

    int maxDigit = getMaxDigit(arr);
    return radixSort(arr, maxDigit);
  }

  /**   * 獲取最高位數(shù)   */  private int getMaxDigit(int[] arr) {
    int maxValue = getMaxValue(arr);
    int minValue = getMinValue(arr);
    return Math.max(getNumLength(maxValue), getNumLength(minValue));
  }

  private int getMaxValue(int[] arr) {
    int maxValue = arr[0];
    for (int value : arr) {
      if (maxValue < value) {
        maxValue = value;
      }
    }
    return maxValue;
  }

  private int getMinValue(int[] arr) {
    int minValue = arr[0];
    for (int value : arr) {
      if (minValue > value) {
        minValue = value;
      }
    }
    return minValue;
  }

  protected int getNumLength(long num) {
    if (num == 0) {
      return 1;
    }
    int lenght = 0;
    for (long temp = num; temp != 0; temp /= 10) {
      lenght++;
    }
    return lenght;
  }

  private int[] radixSort(int[] arr, int maxDigit) {
    int mod = 10;
    int dev = 1;

    for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
      // 考慮負(fù)數(shù)的情況,這里擴展一倍隊列數(shù),其中 [0-9]對應(yīng)負(fù)數(shù),[10-19]對應(yīng)正數(shù) (bucket + 10)      int[][] counter = new int[20][0];

      for (int j = 0; j < arr.length; j++) {
        int bucket = ((arr[j] % mod) / dev) + 10;
        counter[bucket] = arrayAppend(counter[bucket], arr[j]);
      }

      int pos = 0;
      for (int[] bucket : counter) {
        for (int value : bucket) {
          arr[pos++] = value;
        }
      }
    }

    return arr;
  }

  /**   * 自動擴容,并保存數(shù)據(jù)   *   * @param arr   * @param value   */  private int[] arrayAppend(int[] arr, int value) {
    arr = Arrays.copyOf(arr, arr.length + 1);
    arr[arr.length - 1] = value;
    return arr;
  }
}
以上為基數(shù)排序算法詳細(xì)介紹,插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等排序算法各有優(yōu)缺點,用一張圖概括:

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

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

線性對數(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:"桶"的個數(shù)

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

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

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

文檔

基數(shù)排序是什么

基數(shù)排序是一種非比較型整數(shù)排序算法,其原理是將整數(shù)按位數(shù)切割成不同的數(shù)字,然后按每個位數(shù)分別比較。由于整數(shù)也可以表達(dá)字符串(比如名字或日期)和特定格式的浮點數(shù),所以基數(shù)排序也不是只能使用于整數(shù)。
推薦度:
為你推薦
資訊專欄
熱門視頻
相關(guān)推薦
冒泡排序怎么優(yōu)化 桶排序算法原理 計數(shù)排序基本原理 堆排序法 快速排序算法c 歸并排序算法的分治方法 希爾排序c語言實現(xiàn) 選擇排序過程 基數(shù)排序的基數(shù)什么意思 冒泡排序例子 桶排序原理 計數(shù)排序python實現(xiàn) 堆排序算法操作 快速排序算法例題 歸并排序的過程舉例 希爾排序的基本原理 選擇排序算法的思路 基數(shù)排序過程 冒泡排序算法流程圖 c語言桶排序 選擇排序算法代碼 希爾排序過程圖解 歸并排序定義 java快速排序算法代碼 堆排序的初始堆 計數(shù)排序java 排序算法桶排 冒泡排序圖解算法 基數(shù)排序算法c語言 選擇排序圖解 希爾排序流程圖 外部排序歸并算法 快速排序算法思路 堆排序怎么建立初始堆 計數(shù)排序python 桶排序代碼 冒泡排序的改進(jìn)算法 基數(shù)排序和桶排序 選擇排序法c語言 希爾排序的詳細(xì)過程
Top 国产精品亚洲AV三区_国产精品日本一区二区在线播放_国产成人无码久久久精品一_性感美女视频在线观看免费精品
<strike id="cakm0"></strike>
  • <button id="cakm0"><dl id="cakm0"></dl></button>
  • <samp id="cakm0"><tbody id="cakm0"></tbody></samp>
    <samp id="cakm0"><pre id="cakm0"></pre></samp><ul id="cakm0"></ul>
    <strike id="cakm0"></strike>
    <li id="cakm0"></li>
  • <ul id="cakm0"></ul>
  • 欧美日韩中文精品| 亚洲一区二区综合| 国产精品久久久久久久久久三级| 欧美一区永久视频免费观看| 日韩一本二本av| 在线视频观看日韩| 国产一区二区三区精品欧美日韩一区二区三区 | 国内精品美女在线观看| 欧美日韩一区在线观看视频| 免费成人在线观看视频| 久久久www成人免费无遮挡大片 | 国产欧美精品一区二区三区介绍| 欧美精品久久一区二区| 欧美成人午夜77777| 老司机午夜精品视频在线观看| 欧美在线综合| 西瓜成人精品人成网站| 亚洲欧美日韩在线播放| 亚洲性xxxx| 一区二区日本视频| 中国女人久久久| 亚洲天堂av综合网| 亚洲欧美国产制服动漫| 亚洲欧美日韩一区二区| 亚洲男女自偷自拍图片另类| 亚洲在线免费视频| 午夜精品久久久久久久99水蜜桃| 亚洲一级片在线观看| 亚洲在线观看免费| 久久国产高清| 美女精品视频一区| 欧美久久精品午夜青青大伊人| 欧美精品麻豆| 国产精品福利网| 国产三级欧美三级| 很黄很黄激情成人| 亚洲精品免费在线| 亚洲一区二区在线免费观看| 亚洲男人的天堂在线| 久久er精品视频| 欧美成人免费大片| 欧美系列精品| 狠狠色综合色综合网络| 亚洲激情网站| 亚洲欧美视频一区| 蜜臀a∨国产成人精品| 欧美三级乱人伦电影| 国产婷婷色综合av蜜臀av| 在线免费观看视频一区| 99天天综合性| 久久蜜桃香蕉精品一区二区三区| 欧美国产在线电影| 国产久一道中文一区| 亚洲国产日韩一区| 午夜精品福利一区二区三区av| 久久影院午夜片一区| 欧美午夜精品久久久| 伊人久久成人| 亚洲在线视频免费观看| 男人插女人欧美| 国产三区二区一区久久| 99在线|亚洲一区二区| 久久精品夜色噜噜亚洲a∨| 欧美极品在线观看| 国产在线精品自拍| 亚洲午夜精品一区二区三区他趣| 久热精品视频在线| 国产日韩av一区二区| 亚洲最新视频在线| 欧美成人自拍| 狠狠色香婷婷久久亚洲精品| 亚洲人体一区| 久久免费视频这里只有精品| 国产精品网站在线| 亚洲午夜视频在线观看| 欧美精品97| 亚洲欧洲一区二区在线观看| 久久九九精品99国产精品| 国产精品人人做人人爽人人添| 亚洲人在线视频| 裸体一区二区三区| 激情久久五月| 久久青草久久| 国外视频精品毛片| 久久久国产精品一区| 国产美女扒开尿口久久久| 亚洲欧美日韩国产综合精品二区| 欧美屁股在线| 一区二区免费看| 欧美日韩福利在线观看| 亚洲精品婷婷| 欧美三级中文字幕在线观看| 99国产精品私拍| 欧美色视频在线| 亚洲男人的天堂在线aⅴ视频| 欧美午夜久久久| 亚洲欧美激情视频| 国产一区二区丝袜高跟鞋图片| 欧美一区二区三区精品电影| 国产专区综合网| 另类专区欧美制服同性| 亚洲人永久免费| 欧美吻胸吃奶大尺度电影| 亚洲夜间福利| 国内精品久久久久影院薰衣草| 久久久久久亚洲精品杨幂换脸| 国产一区二三区| 麻豆久久精品| 在线亚洲电影| 国产视频在线观看一区二区三区| 久久久xxx| 亚洲美女视频网| 国产精品亚洲一区| 久久综合伊人77777麻豆| 亚洲激情av在线| 国产精品国产三级国产普通话99| 欧美一区二区日韩| 亚洲精品国产精品国自产在线 | 亚洲一区二区高清| 国产一区二区三区在线播放免费观看| 久久久久久久久岛国免费| 91久久精品一区二区三区| 欧美日韩在线观看一区二区三区| 亚洲欧美一区二区精品久久久| 黄色一区三区| 欧美午夜精品久久久久久超碰| 久久精品国产v日韩v亚洲| 亚洲免费电影在线| 国产视频一区免费看| 欧美激情精品久久久久久| 亚洲欧美怡红院| 亚洲欧洲一级| 国产一区二区精品在线观看| 欧美日韩国产亚洲一区 | 狠狠色噜噜狠狠色综合久| 欧美日韩国产123| 久久人人爽人人爽爽久久| 一区二区日韩精品| 在线观看一区视频| 国产精品久久久久久妇女6080| 久久亚洲午夜电影| 欧美一级视频一区二区| 日韩一级在线| 亚洲国产美女| 精品91在线| 国产午夜精品一区二区三区欧美| 欧美日韩亚洲不卡| 欧美承认网站| 蜜臀91精品一区二区三区| 久久精品国产视频| 欧美一区二区三区在线播放| 中日韩高清电影网| 日韩小视频在线观看专区| 亚洲春色另类小说| 在线高清一区| 极品日韩久久| 国产综合第一页| 国产一区二区三区久久悠悠色av| 国产精品久久久久久久久搜平片 | 一本久道综合久久精品| 亚洲黄色视屏| 亚洲国产另类久久久精品极度| 国语自产精品视频在线看一大j8| 国产伦精品一区二区三区视频孕妇 | 亚洲一区日韩在线| 在线视频欧美日韩精品| 99在线|亚洲一区二区| 99pao成人国产永久免费视频| 亚洲六月丁香色婷婷综合久久| 亚洲国产欧美久久| 日韩视频在线一区二区| 99国产精品99久久久久久| 一本久道综合久久精品| 亚洲在线黄色| 羞羞答答国产精品www一本| 欧美在线观看视频| 久久久777| 欧美激情第三页| 欧美日韩国产麻豆| 国产精品播放| 国产情人节一区| 在线观看成人av电影| 亚洲日本成人| 一区二区三区成人精品| 亚洲欧美日韩在线综合| 久久精品中文字幕免费mv| 久久免费99精品久久久久久| 农村妇女精品| 欧美视频二区| 国产视频一区免费看| 精品91免费| 在线中文字幕日韩| 午夜精品久久久久久久蜜桃app | 亚洲激情国产| 亚洲一区二区网站| 久久精品视频免费| 欧美精品日日鲁夜夜添| 国产精品无码专区在线观看| 18成人免费观看视频| 亚洲一区二区三区免费视频|