加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

十大经典排序算法总结(含Java代码实现)

发布时间:2019-08-28 16:30:18 所属栏目:优化 来源:佚名
导读:最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在桶排序算法中对每个桶进行排序直接使用了Collection.sort()函数,这样虽然能达到效果,但对于算法研究来讲是不可以的

10.3 代码实现

  1. /** 
  2.  * 基数排序 
  3.  * @param array 
  4.  * @return 
  5.  */ 
  6.  public static int[] RadixSort(int[] array) { 
  7.  if (array == null || array.length < 2) 
  8.  return array; 
  9.  // 1.先算出最大数的位数; 
  10.  int max = array[0]; 
  11.  for (int i = 1; i < array.length; i++) { 
  12.  max = Math.max(max, array[i]); 
  13.  } 
  14.  int maxDigit = 0; 
  15.  while (max != 0) { 
  16.  max /= 10; 
  17.  maxDigit++; 
  18.  } 
  19.  int mod = 10, div = 1; 
  20.  ArrayList<ArrayList<Integer>> bucketList = new ArrayList<ArrayList<Integer>>(); 
  21.  for (int i = 0; i < 10; i++) 
  22.  bucketList.add(new ArrayList<Integer>()); 
  23.  for (int i = 0; i < maxDigit; i++, mod *= 10, div *= 10) { 
  24.  for (int j = 0; j < array.length; j++) { 
  25.  int num = (array[j] % mod) / div; 
  26.  bucketList.get(num).add(array[j]); 
  27.  } 
  28.  int index = 0; 
  29.  for (int j = 0; j < bucketList.size(); j++) { 
  30.  for (int k = 0; k < bucketList.get(j).size(); k++) 
  31.  array[index++] = bucketList.get(j).get(k); 
  32.  bucketList.get(j).clear(); 
  33.  } 
  34.  } 
  35.  return array; 
  36.  } 

10.4 算法分析

最佳情况:T(n) = O(n * k) 最差情况:T(n) = O(n * k) 平均情况:T(n) = O(n * k)

基数排序有两种方法:

  • MSD 从高位开始进行排序
  • LSD 从低位开始进行排序

基数排序 vs 计数排序 vs 桶排序

这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异:

  • 基数排序:根据键值的每位数字来分配桶
  • 计数排序:每个桶只存储单一键值
  • 桶排序:每个桶存储一定范围的数值

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!