对大量有重复数字的数组进行排序

针对含有大量重复数字的数组,本文探讨了两种排序策略:一是利用Hash法,二是采用AVL树。尽管常规排序算法如归并排序或快速排序的时间复杂度为Nlog2N,但在考虑重复元素的情况下,这两种方法可能提供更优的解决方案。
摘要由CSDN通过智能技术生成

题目:#给定一个数组,已知数组中有大量的重复数字,如何对数字进行高效的排序

 

思路一:Hash法

#coding=utf-8
#对大量有重复数字的数组进行排序
#给定一个数组,已知数组中有大量的重复数字,如何对数字进行高效的排序
arr = [16,13,16,3,3,13,3,4,13,101,4,4]
def sort_hash(a):
    """
        Hash法
        思路:创建一个hash表,然后遍历数组,若遍历的数在hash表中,对应的值+1
        若不存在,把遍历的值加入hash表中,并初始化key对应的值为1
        对hash 的key 进行快速排序(Mlog2M, M 为数组中不同数字的个数) 
        时间复杂度: N + Mlog2M
        空间复杂度:N
    """
    b = dict()
    for i in range(len(a)):
        if a[i] in b:
            b[a[i]] +=1
        else:
            b[a[i]] = 1
    c = b.keys()
    sort_quick(c, 0, len(b.keys())-1)
    print c
    for i in c:
        while(b[i]>0):
            print i
            b[i]-=1

def sort_quick(lists, low, high):
    if low >= high:
        return lists
    i,j = low, high
    key = lists
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值