个人随笔
目录
Java实现九种排序算法9:基数排序
2020-04-12 23:10:28

基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。

java实现

  1. public class JiShu {
  2. public static void main(String[] args) {
  3. int[] a={49,38,65,97,176,213,227,49,78,34,12,164,11,18,1};
  4. System.out.println("排序之前:");
  5. for (int i = 0; i < a.length; i++) {
  6. System.out.print(a[i]+" ");
  7. }
  8. //基数排序
  9. sort(a);
  10. System.out.println();
  11. System.out.println("排序之后:");
  12. for (int i = 0; i < a.length; i++) {
  13. System.out.print(a[i]+" ");
  14. }
  15. }
  16. private static void sort(int[] array) {
  17. //找到最大数,确定要排序几趟
  18. int max = 0;
  19. for (int i = 0; i < array.length; i++) {
  20. if(max<array[i]){
  21. max = array[i];
  22. }
  23. }
  24. //判断位数
  25. int times = 0;
  26. while(max>0){
  27. max = max/10;
  28. times++;
  29. }
  30. //建立十个队列
  31. List<ArrayList> queue = new ArrayList<ArrayList>();
  32. for (int i = 0; i < 10; i++) {
  33. ArrayList queue1 = new ArrayList();
  34. queue.add(queue1);
  35. }
  36. //进行times次分配和收集
  37. for (int i = 0; i < times; i++) {
  38. //分配
  39. for (int j = 0; j < array.length; j++) {
  40. //每一次比较都把奇数相同的放在同一个队列中,Math.pow(a,b) a的b次方
  41. //如果i=2表示取第二位,那么就%100取余 然后/10取取除
  42. int x = array[j]%(int)Math.pow(10, i+1)/(int)Math.pow(10, i);
  43. //直接去奇数位置寻找对应的列表
  44. ArrayList queue2 = queue.get(x);
  45. queue2.add(array[j]);
  46. queue.set(x,queue2);
  47. }
  48. //收集
  49. int count = 0;
  50. for (int j = 0; j < 10; j++) {
  51. while(queue.get(j).size()>0){
  52. ArrayList<Integer> queue3 = queue.get(j);
  53. array[count] = queue3.get(0);
  54. queue3.remove(0);
  55. count++;
  56. }
  57. }
  58. }
  59. }
  60. }

注:保证不能有负数

 287

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2