常见排序算法之计数排序与基数排序

您所在的位置:网站首页 计数排序和基数排序一样吗 常见排序算法之计数排序与基数排序

常见排序算法之计数排序与基数排序

2024-07-15 15:53| 来源: 网络整理| 查看: 265

排序算法是计算机科学中一个重要的研究领域,常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序等。然而,在某些特定场合,这些常规的排序算法可能并不是最优选择。这时,我们可以考虑使用计数排序和基数排序这两种线性时间复杂度的排序算法。

一、计数排序

计数排序是一种非常高效的排序算法,其前提假设是输入数据是一组非负整数。它的基本思想是统计数组中每个元素的出现次数,然后根据出现次数将元素放到正确的位置。

实现计数排序的关键步骤如下:

统计数组中每个元素的出现次数。创建一个新的数组,长度为最大元素的值加1,并将所有元素初始化为0。根据统计的次数,将原数组中的元素放入新数组的相应位置,并将对应位置的值加1。遍历新数组,将每个位置的值还原为原数组中的元素。

以下是一个简单的Python实现:

def counting_sort(arr): max_val = max(arr) count = [0] * (max_val + 1) for num in arr: count[num] += 1 sorted_arr = [] for i in range(len(count)): if count[i] > 0: sorted_arr.extend([i] * count[i]) return sorted_arr

二、基数排序

基数排序是在计数排序的基础上进行改进的一种排序算法,它可以处理负数和字符串等更广泛的数据类型。其基本思想是从最低位开始,按照每一位的数字进行比较和交换,直到最高位。

实现基数排序的关键步骤如下:

将数组中的元素统一为同样的数位长度,数位较短的元素前面补0。从最低位开始,依次对每一位进行一次计数排序。重复步骤2,直到最高位排序完成。返回有序数组。

以下是一个简单的Python实现:

def radix_sort(arr): max_val = max(arr) digit = len(str(max_val)) bucket = [[] for _ in range(10)] for num in arr: bucket[num % 10].append(num) arr = [] for i in range(10): arr.extend(bucket[i]) return arr[::]

应用场景:计数排序适用于非负整数较多的情况,尤其在数据量较大时,其时间复杂度为O(n+k),其中n为数组长度,k为最大元素的值。而基数排序适用于数字位数不太多的情况,尤其在处理字符串时,其时间复杂度也为O(n+k),其中n为数组长度,k为最大数字的位数。在实际应用中,根据具体场景选择合适的排序算法可以大大提高程序的效率和准确性。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3