原理:预备知识:Java程序设计基础->数组(二)
作者:reader1   类别:PHP开发    日期:2018-06-29 15:03:23    阅读:728 次   消耗积分:0 分



注:本节教材内容,与上期推送的《预备知识:Java程序设计基础->数组(一)》为一个章节。

回顾上节内容,请点击:原理:预备知识:Java程序设计基础->数组(一)



实验流程



5.冒泡序算法。


数组排序最常用的两种排序方法是选择排序和冒泡排序。


(1).冒泡排序:依次比较相邻的两个数,将小数放在前面,大数放在后面。

(2).选择排序:每一次从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序数列的最后,直到全部待排序的数据元素排完。

 

我们以冒泡排序算法来给大家举例说明:假定有一个数组为int[] a = {12, 34, 23, 56, 69, 38, 47};则冒泡排序按如下顺序进行:


(1).第一轮:比较12和34,位置不变,比较34和23,交换位置,比较34和56,位置不变。这样完成第一轮后我们可以将本数组中的最大值69的位置放到数组的最后。完成这一轮后,数  组的顺序变为:{12,23,34,56,38,47,69}。

(2).第二轮:比较12和23,位置不变,比较23和34,位置不变,比较34和56,位置不变,比较56和38,位置交换,最后将本轮的次大值56放在了数组倒数第2的位置上。

(3).第三轮:以此类推,最后将数组的值按从小到大的顺序排列。当然,我们也可以将数组的值从大到小排列,其原理是一样的,只要在两两比较时将小值交换到后面即可。下列代码为大家演示了冒泡排序算法的具体实现,务必认真理解。


int[] a = {12, 34, 23, 56, 69, 38, 47};
//外循环,指定比较的轮数,一共是长度-1轮
for (int i=0; i<a.length-1; i++) {
    //内循环,将数组的值进行一一比较
    for (int j=0; j<a.length-i-1; j++) {
        if (a[j] > a[j+1]) {
            int temp = a[j];
            a[j] = a[j+1];
            a[j+1] = temp;
        }
    }
}
 
//输出排序后的数组进行验证
for (int i: a) {
System.out.println(i);
}


 

6.数组的动态扩展。


我们知道,在Java中,数组是固定长度不能扩展的。但是在现实情况中,动态地扩展数组以适应程序的要求是非常常见的。比如我们在WoniuATM中,要利用数组来完成用户的注册,但是我们并不知道具体的开户注册数量,所以无论我们定义何种固定长度的数组,都不能达到自适应的目的。如果数组定义得太短,不够用,定义得太长,则浪费存储空间,这是其必要性。先来看看Java中数组动态扩展的原理:


(1).定义数组A,然后定义数组B,数组B的长度为A的长度+1

(2).将数组A的值全部复制给B

(3).将数组B的地址赋值给数组A,即A=B即可。


通过上述原理的描述,我们可以得知,其实质并不是将数组A直接加长,而是新增一个数组,将新数组的地址赋值给原数组名,进而模拟出动态扩展的功能,来看看具体代码实现:


int[] a = {11, 22, 33, 44};
System.out.println("数组a的长度为:" + a.length);
int[] b = new int[a.length+1];
for (int i=0; i<a.length; i++) {
b[i] = a[i];
}
a = b;
System.out.println("数组a的长度为:" + a.length);

 

7.多维数组。


前面所学的都是一维数组的操作,在实际应用中,我们还有可能使用二维数组,三维数组,甚至N维数组。其实多维数组不难理解,就是数组的数组,比如二维数组,那么里面保存的每一个值就是一个一维数组,如下例所示:


版权所有,转载本站文章请注明出处:蜗牛笔记, http://www.woniunote.com/article/56
上一篇:原理:预备知识:Java程序设计基础->数组(一)
下一篇:实验:实现WoniuATM的注册与登录
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}