数组和冒泡排序

来源:互联网 发布:淘宝店名在哪里修改 编辑:程序博客网 时间:2024/06/03 17:52

1.数组的特点。
·数组是可以保存一组数据的一种数据结构,它本身也会占用一个内存地址,因此数组是引用类型
·一个数组中只能保存一种类型的数据,可以保存基本类型,也可以保存Object。一个int,一个String是不能同时保存在一个数组内的(如果是对象型数组,注意存放的每一个对象都必须被实例化)。
·数组的长度规定好即固定,无论其保存的数据是否填满数组
·数组一旦定义好就不可以修改长度,如果要修改就必须重新定义一个新数组或者引用其他的数组,因此数组的灵活性较差
·数组拥有边界检查,尝试获取不在数组范围内的值时,会抛出ArrayIndexOutOfBoundsException异常
2.数组的优缺点
·数组的优点是效率高
3.冒泡排序的算法。
·比较两个相邻的元素,将值大的元素交换至右端。
·依次比较相邻的两个数,将小数放在前面,大数放在后面。首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。


//用二重循环求出二维数组b所有元素的和
        int[][] b={{11},{21,22},{31,32,33}};
        int sum=0;
        for(int i=0;i<b.length;i++){
            for(int j=0;j<b[i].length;j++){
                sum+=b[i][j];
            }
        }
        System.out.println(sum);



         * 循环二分查找,返回第一次出现该值的位置
         * @param array 已排序的数组
         * @param findValue   需要找的值
         * @return 值在数组中的位置,从0开始。找不到返回-1
         */

        /*int[] array={1,2,3,4,5,6,7,8,9,10};
        System.out.println(searchLoop(array, 9));
    }
    public static int searchLoop(int[] array, int findValue) {
        // 如果数组为空,直接返回-1,即查找失败
        if (array == null) {
            return -1;
        }
        // 起始位置
        int start = 0;
        // 结束位置
        int end = array.length - 1;
        while (start <= end) {            
            // 中间位置
            int middle = (start + end) / 2;
            // 中值
            int middleValue = array[middle];
            if (findValue == middleValue) {
                // 等于中值直接返回
                return middle;
            } else if (findValue < middleValue) {
                // 小于中值时在中值前面找
                end = middle - 1;
            } else {
                // 大于中值在中值后面找
                start = middle + 1;
            }
        }
        // 返回-1,即查找失败
        return -1;*/


数组逆序操作:定义长度为10的数组,将数组元素对调,并输出对调前后的结果。

思路:把0索引和arr.length-1的元素交换,把1索引和arr.length-2的元素交换..

只要交换到arr.length/2的时候即可。

int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
        int newArr[]=selectArr(oldArr);
        for(int i:newArr){
            System.out.print(i+" ");
        }
   }
    // 去掉数组中值为0的元素的方法
    private static int[] selectArr(int[] arr) {
        // 1.计算数组中元素不为0的个数
        int count=0;
        for(int i:arr){
            if(i!=0){
                count++;
            }
        }
        // 2.创建一个新数组,长度为count
        int newArr[]=new int[count];
        // 3.复制不为0的元素到新数组中
        int size=0;
        for(int i:arr){
            if(i!=0){
                newArr[size++]=i;
            }
        }
        return newArr;

   }

}