作家
登录

常用排序算法比较与分析

作者: 来源: 2017-04-27 15:03:33 阅读 我要评论

2.5 基数排序

核心思惟:起首是低位排序,然后收集;其次是高位排序,然后再收集;依次类推,直到最高位。

Python源代码:

  1. #-------------------------基数排序-------------------------------- 
  2. #肯定排序的次数 
  3. #排序的次序跟序列中最大年夜数的位数相干 
  4. def radix_sort_nums(data_list): 
  5.  maxNum = data_list[0] 
  6. #寻找序列中的最大年夜数 
  7.  for x in data_list: 
  8.  if maxNum < x: 
  9.  maxNum = x 
  10. #肯定序列中的最大年夜元素的位数 
  11.  times = 0 
  12.  while (maxNum > 0): 
  13.  maxNum = (int)(maxNum/10) 
  14.  times = times+1 
  15.  return times 
  16. #找到num大年夜低到高第pos位的数据 
  17. def get_num_pos(num,pos): 
  18.  return ((int)(num/(10**(pos-1))))%10 
  19. #基数排序 
  20. def radix_sort(data_list): 
  21.  count = 10*[None] #存放各个桶的数据统计个数 
  22.  bucket = len(data_list)*[None] #临时存放排序结不雅 
  23. #大年夜低位到高位依次履行轮回 
  24.  for pos in range(1,radix_sort_nums(data_list)+1): 
  25.  #置空各个桶的数据统计 
  26.  for x in range(0,10): 
  27.  count[x] = 0 
  28.  #统计当前该位(个位,十位,百位....)的元素数量 
  29.  for x in range(0,len(data_list)): 
  30.  #统计各个桶将要装进去的元素个数 
  31.  j = get_num_pos(int(data_list[x]),pos) 
  32.  count[j] = count[j]+1 
  33.  #count[i]表示第i个桶的右界线索引 
  34.  for x in range(1,10): 
  35.  count[x] = count[x] + count[x-1] 
  36.  #将数据依次装入桶中 
  37.  for x in range(len(data_list)-1,-1,-1): 
  38.  #求出元素第K位的数字 
  39.  j = get_num_pos(data_list[x],pos) 
  40.  #放入对应的桶中,count[j]-1是第j个桶的右界线索引 
  41.  bucket[count[j]-1] = data_list[x] 
  42.  #对应桶的装入数据索引-1 
  43.  count[j] = count[j]-1 
  44.  # 将已分派好的桶中数据再倒出来,此时已是对应当前位数有序的表 
  45.  for x in range(0,len(data_list)): 
  46.  data_list[x] = bucket[x] 

      推荐阅读

      Android中内存优化的那些事 - 一个有关图片的优化记录

    客服群里叫唤着:这个用户图片不显示了,那个用户图片也不显示了。我拿着手上一切正常的测试机,what the hell&hellip;&hellip;默默地打开bugly。 满园春色关不住,遍地内存溢出来!是的,>>>详细阅读


    本文标题:常用排序算法比较与分析

    地址:http://www.17bianji.com/lsqh/35003.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)