zoukankan      html  css  js  c++  java
  • cs61b homework10

    part1:countingsort的算法感觉还是蛮绕的,贼烧脑,注意是对16进制的每一位进行排序,取得相应位数值算法可以写成(keys[i]%(whichDigit+1))/whichDigit;

    code:

     1 public static int[] countingSort(int[] keys, int whichDigit) {
     2         if(whichDigit>7||whichDigit<0)
     3             return null;
     4         int sort[]=new int[keys.length];
     5         double num=Math.pow((double)16, (double)(whichDigit+1));
     6         double num3=Math.pow((double)16, (double)(whichDigit));
     7         int num2=(int)num;
     8         int num4=(int)num3;
     9         for(int i=0;i<keys.length;i++){
    10             sort[i]=(keys[i]%num2)/num4;
    11         }
    12         int count[]=new int[16];
    13         for(int i=0;i<sort.length;i++){
    14         count[sort[i]]++;    
    15         }
    16         int total=0;
    17         for(int i=0;i<count.length;i++){
    18             int c=count[i];
    19             count[i]=total;
    20             total+=c;
    21         }
    22         int y[]=new int[keys.length];
    23         for(int i=0;i<keys.length;i++){
    24             y[count[sort[i]]]=keys[i];
    25             count[sort[i]]++;
    26         }
    27         return y;
    28         
    29         
    30       }

    part2:radixsort在coutingsort基础上叠加7次,到int的取值范围即可。

    code:

    1 public static int[] radixSort(int[] keys) {
    2           int[]radixsort=new int[keys.length];
    3           for(int i=0;i<keys.length;i++)
    4               radixsort[i]=keys[i];
    5         for(int i=0;i<8;i++){
    6             radixsort=countingSort(radixsort,i);
    7         }
    8         return radixsort;
    9       }

    运行结果:

    keys are [ 60013879 11111119 2c735010 2c732010 7fffffff 4001387c 10111119 529a7385 1e635010 28905879 11119 0 7c725010 1e630010 111111e5 61feed0c 3bba7387 52953fdb 40013879 ]
    keys are [ 0 11119 7fffffff 10111119 11111119 111111e5 1e630010 1e635010 28905879 2c732010 2c735010 3bba7387 40013879 4001387c 52953fdb 529a7385 60013879 61feed0c 7c725010 ]
  • 相关阅读:
    Python学习(18)——函数
    Python学习(17)——推导式
    labview隐藏任务栏
    labview下载地址
    labview出现系统998错误
    油猴使用指南
    无法执行该VI,必须使用LabVIEW完整版开发系统才可以解决该错误
    修改远程桌面连接默认端口
    labview使用了报表模块,在生成exe时需要添加以下内容,否则打包后不能开启excel功能
    腾讯通二次开发接口
  • 原文地址:https://www.cnblogs.com/lyz1995/p/7282574.html
Copyright © 2011-2022 走看看