美文网首页
计数排序和基数排序

计数排序和基数排序

作者: 那个人_37d7 | 来源:发表于2018-08-22 16:11 被阅读0次
  1. 这两种排序方法的时间复杂度O(n), 不同于比较排序

  2. 计数排序

    1. 基本方法:
      新建辅助数组, 把原数组中的值对应的辅助数组索引处值计数, 利用索引的有序性对原数组进行排序
    2. 标记变量
    k  原数组中最大值+1
    
    1. 代码
    def counting_sort(arr, k):
      result = []
      # 辅助数组
      arr_temp = [0]*k
      # 遍历原数组, 元素值对应的辅助数组索引处值+1
      for i in arr:
        arr_temp[i] += 1
      # 累加求和
      # 为什么不直接遍历辅助数组, 通过值来还原排序的数组?
      # for i in range(k):
      #  while arr_temp[i] > 0:
      #    result.append(i)
      #    arr_temp[i] -= 1
      for i in range(k):
        if i > 0:
          arr_temp[i] = arr_temp[i] + arr_temp[i-1]
      # 还原排序的数组
      for i in range(len(arr)-1, -1, -1):
        # 原数组中值, 是辅助数组的索引, 假设辅助数组索引处的值n
        # 它是自身和比自身小的数字数量, 即结果数组中第n位
        result[arr_temp[arr[i]] - 1] = arr[i]
        arr_temp[arr[i]] -= 1
    
    1. 适合有上限, 分布集中的整数数组
  3. 基数排序

    1. 基本方法:
      根据数字的每一位进行排序. 利用该位上的值, 将其放入0-10数组中, 使其从局部有序到整体有序.
    2. 标记变量:
    radix 进制
    k  最大位数
    
    1. 代码:
    import math
    
    def  sort(a, radix=10):
      result = [[] for i in range(radix)] 
      # 最大位数
      k = math.ceil(math.log(max(a), radix))
      for i in range(k):
         for j in a:
          # 解析每个数该位上的数字
           num = j % 10**(i + 1) // 10**i
           result[num].append(j)
          # 清空原数组
         del a[:]
        for j in result:
          a.extend(j)
    
  4. 共同点:
    利用映射关系, 将待排序中数组的值映射到辅助数组的索引上, 再通过索引的有序进行还原.

相关文章

  • php-计数排序、基数排序、桶排序

    计数排序、基数排序、桶排序 时间复杂度 O(n) 计数排序 基数排序 桶排序

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • iOS 计数排序、基数排序、桶排序

      计数排序(Counting Sort)、基数排序(Radix Sort)、桶排序(Bucket Sort)适合...

  • (转)排序算法

    排序算法点这里 数据结构与算法——计数排序、桶排序、基数排序

  • JavaScript:十大排序的算法思路和代码实现

    本文内容包括:(双向)冒泡排序、选择排序、插入排序、快速排序(填坑和交换)、归并排序、桶排序、基数排序、计数排序(...

  • 计数排序和基数排序

    这两种排序方法的时间复杂度O(n), 不同于比较排序 计数排序基本方法:新建辅助数组, 把原数组中的值对应的辅助数...

  • 数据结构与算法——计数排序、桶排序、基数排序

    数据结构与算法——计数排序、桶排序、基数排序 计数排序 计数排序有如下四个步骤。 首先会对每个输入进行频率统计,得...

  • Java | 10种排序算法

    冒泡排序 选择排序 插入排序 希尔排序 计数排序 基数排序 堆排序 归并排序 快速排序 桶排序

  • 常见的排序

    冒泡排序: 选择排序: 插入排序: 快速排序: 希尔排序: 归并排序: 堆排序: 计数排序: 桶排序: 基数排序:

  • 002--20200409刷题

    冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序

网友评论

      本文标题:计数排序和基数排序

      本文链接:https://www.haomeiwen.com/subject/bbqyiftx.html