Java数组与排序

                                      学习心得

一、专业课

      1、数组

            1)      基本类型存放于栈,引用类型存放于堆

               //基本数据类型存放在   栈

        //引用数据类型存放在    堆

        int[]a2 = {1,2,3};   //都存放于栈

        String[]strings = {"","s"};//都存放于堆

 

        int[]a = {1,2,3};

        int[]b = a;

        int[]c = a.clone();

        /*char[] u ="asdf"; 都抱错

        char[] i =new char[]{"ksdajfkl"};*/

        System.out.println(a==b);true

        System.out.println(a==c);false

            2)  数组声明

                     方式1(推荐,更能表明数组类型)

                       type[]变量名 = new type[数组中元素的个数];

                       比如:

                       int[]a = new int[10];

                       数组名,也即引用a,指向数组元素的首地址。

                       方式2(同C语言)

                       type变量名[] =new type[数组中元素的个数];

                       如:

                       inta[] = new int[10];

                       方式3 定义时直接初始化

                       type[]变量名 = new type[]{逗号分隔的初始化值};

                       其中红色部分可省略,所以又有两种:

                       int[]a = {1,2,3,4};

                       int[]a = new int[]{1,2,3,4};

                       其中int[]a = new int[]{1,2,3,4};的第二个方括号中不能加上数组长度,因为元                 素个数是由后面花括号的内容决定的。  

          3)  数组长度

                       Java中的每个数组都有一个名为length的属性,表示数组的长度。

                       length属性是public final int的,即length是只读的。数组长度一旦确定,就                 不能改变大小

 

           

      2、排序算法

            1)冒泡排序

     public staticvoid bubbleSort(int[] is) {

     //第一轮,找出最大值,放到最后 比较len-1次

     //第二轮,找出最大值,放到最后 比较len-2次

     for(int i=0;i<is.length-1; i++){

       for(int j=0;j<is.length-i-1;j++){

         if(is[j]>is[j+1]) {

            swap(is,j, j+1);

         }

       }

       }

     }

              2)选择排序

                  public staticvoid selectShort(int[] is) {

     int k,t,len = is.length;

     for(int i=0;i<len;i++){

       k=i;

       for(int j=len-1;j>i; j--){

         if(is[k]>is[j]) {

            k=j;

         }

       }

       t = is[i];

       is[i] = is[k];

       is[k] = t;

       }

     }

            3)插入排序

                  /** 

    * 插入排序<br/> 

    *<ul> 

    *<li>从第一个元素开始,该元素可以认为已经被排序     </li> 

    *<li>取出下一个元素,在已经排序的元素序列中从后向   前扫 描</li> 

    *<li>如果该元素(已排序)大于新元素,将该元素移到   下一位置</li> 

    *<li>重复步骤3,直到找到已排序的元素小于或者等于   新元素的位置</li> 

    *<li>将新元素插入到该位置中</li> 

    *<li>重复步骤2</li> 

    *</ul>  

    * @paramis 

    */ 

     public staticvoid insertSort(int[] is) {  

      int len = is.length,temp,j;

      for(int i=1; i<len;i++){

      temp= is[i];

      for(j=i;j>0&&temp<is[j-1]; j--)

         is[j]=is[j-1];

      is[j]=temp;

      printTimes(is,i);

      }

     }

二、小组PK

     1、我方题目

       1、以下哪个程序语句有错(A, B,C,D)(可多选题)(以下变量与类既有定义)

       A.int[]is = {1,2,3,4,5,6,};

       B.for(intk=0,k<is.length,k++){}

       C.int[]a = new int[3]{1,2,3};

       D.Person[]person = {new Person('2'),new Person(2)};

 

       提示:Person类定义

       classPerson{

       inti;

       publicPerson(int i) {

              this.i= i;

       }

       }

       答案:

       B,C

      A选项:Java文档       Chapter10.6http://docs.oracle.com/javase/specs/jls/se8/html/jls10.html#jls-10.6

       里面有一句话 A trailing comma may appearafter the last expression in an array initializer    and is ignored.

       也就是会忽视最后的逗号,所以A没错

 

        D选项:由于参数传递时char类型会自动转换为int类型,所以D没错

      

      

       2、程序填空题?

       /** 

        * 插入排序<br/>  

        *int[] is = {100,92,56,32,78,12};

        *请从小到大排序

        */ 

       publicstatic void insertSort(int[] is) {  

           int len = is.length,temp,j;

           for(int i=1; i<len; i++){

                 temp= is[i];

                 for(j=i;__________________; j--)

                         is[j]=is[j-1];

                 is[j]=temp;

           }

       }

       答案

       j>0&&temp<is[j-1]

 

       /** 

        * 插入排序<br/> 

        * <ul> 

        * <li>从第一个元素开始,该元素可以认为已经被排序</li> 

        * <li>取出下一个元素,在已经排序的元素序列中从后向前扫描</li> 

        * <li>如果该元素(已排序)大于新元素,将该元素移到下一位置</li> 

        * <li>重复步骤3,直到找到已排序的元素小于或者等于新元素的位置</li> 

        * <li>将新元素插入到该位置中</li> 

        * <li>重复步骤2</li> 

        * </ul> 

        *  

        * @param is 

        */ 

       3.程序填空题

       /**

       *程序功能是,数组去重

       */

       publicstatic void main(String[] args) {

              int[]is = {1,2,3,4,3,2,5,6};

              Arrays.sort(is);

              int[]copy = new int[is.length];

              intlen = 0;//代表复制数组中元素的真实长度

              for(inti = 0; i<is.length; i++){

                     if(0== i){

                            ____________________;

                     }else{

                            if(____________________) {

                                   copy[len++]= is[i];

                            }

                     }

                    

              }

              //打印数组

              for(inti=0;i<len; i++){

                     System.out.println(copy[i]);

              }

       }

 

       答案:

       copy[len++]= is[i]

       copy[len-1]!= is[i]

 

       4,程序输出结果是?

 

       publicstatic void main(String[] args) {

              intlen = 9;

              inta = 2;

              for(inti=0;i<len;i++){

                     a++;

                     for(intj=i;j<len;j++){

                            if(0 == len%a) {

                                   a--;

                                   len-= 3;

                                   continue;

                            }

                     }

              }

              System.out.println("a="+a+"len="+len);          

       }

       答案

       a=0len=0

 

       5.程序有错吗?

       有,则说明理由;

       没有,请输出结果(a的ascii码为97):

       publicstatic void main(String[] args) {

              Stringstring = "abcd";

              int[]arr = new int[string.length()];

              char[]chars = string.toCharArray();

              for(inti=0; i<arr.length();i++){

                     arr[i]= chars[i];

              }

              for(inti:arr){

                     System.out.println(i);

              }

             

       }

       答案:

       有错,因为arr.length()有错,数组的length是属性不需要(),而String的length是方法需要     ().

       2、对方题目

    1、下面错误的初始化语句是(多选) A BD

         A char str[] = "hello";

         B char str[100] = "hello";

         C char str[] = {'h','e','l','l','o'};

         D char str[] = {'hello'};

 

         2、int[] arr = {45, 20, 53, 108, 91, 55,25,84,61};

         int len = arr.length;

         for (int i = 0; i < len - 1; i++) {

         for (int j = i + 1; j < len; j++) {

                  if (arr[i] > arr[j]) {

                          int temp = arr[i];

                          arr[i] = arr[j];

                          arr[j] = temp;

                  }

                                  

         }

         A

         }

         当i=6时,程序运行到A位置时,arr的值是多少。

 

         20 25 45 53 55 61 84 108 91

 

         3、执行完代码"int[]x=new  int[25];"后以下(A,B)说明正确的

 

         A. x[1]为0  

 

         B. x[24]为0

 

         C. x[25]为未定义 

  

         D. x[1]为空

 

 

         4、int[] a = {1,2,3,4,5};

         int[] b = a;

         b[2] = b[1] +b[4];

                         

         for(int c:b){

         System.out.print(c + "  ");

         }

         System.out.println();

 

         for(int c:a){

         System.out.print(c + "  ");

         }

 

         求打印结果

         1 2 7 4 5

         1 2 7 4 5

 

 

         5、补充完整下面方法:在[low, hign]区间内获取 n 个不同随机数(n < 区间大小) ,

         并把随机数存在一数组中返回。

 

 

 

            static int[] getRandom(int n, int low, inthign){

 

                int len = hign - low +1;

                  int  ran[] = new int[len];

                  int result[] = new int[n];

                  Random rd = new Random();

                  for(int i = 0; i < len;i++)

                __________________________

                  for(int j = 0; j < n; j++){

                          int b =rd.nextInt(len);

                          result[j] = ran[b];//

                          for(int k = b; k <len - 1; k++)

                                   ran[k] =ran[k + 1];

                          ______________________________

                  }

                 

                  return result;

        

                 }

 

         1/ ran[i] = low + i;

         2/ len -- ;

   学习心得:

   1.java编程不管怎么样都会有很多细节问题,望多尝试新型代码,或故意编错

 

 

黄品民

                                         2017年3月15日

             

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值