005-數(shù)組,冒泡排序,二分查找法

什么是數(shù)組?

1、數(shù)組也是一種數(shù)據(jù)類型(應(yīng)用數(shù)據(jù)類類型)
2、數(shù)組是可以存放多個值

為什么要用數(shù)組?

當(dāng)我們要存儲相同類型的多個數(shù)據(jù)的時候,需要定義多個變量,這樣在使用的不方便。因為數(shù)組是可以存儲多個值,所以我們可以用數(shù)組來表示這個多個數(shù)據(jù)。

數(shù)組如何定義

基本數(shù)據(jù)類型定義
數(shù)據(jù)類型 變量名 = 變量值;
int a = 10;

數(shù)組定義:
數(shù)據(jù)類型 數(shù)組名;
int[] arr;  或者   int arr[];

數(shù)組的賦值
靜態(tài)初始化
int[] arr = {10,15,12,7,20};
或者int[] arr1 = new int[]{1,2,3,4,5};

獲取數(shù)組元素   數(shù)組[下標(biāo)]     arr[0]

動態(tài)初始化    長度必須要定義
int[] arr = new int[長度];
賦值   arr[0] = 1;
      arr[1] = 10;
      ......

獲取數(shù)組元素   數(shù)組[下標(biāo)]     arr[0]

數(shù)組遍歷

  • for循環(huán)遍歷
//定義一個數(shù)組,輸出數(shù)組中的每一個元素 
        String[] arr =  {"cxk","lsis","wangwu","jack","rose","趙四"};

         //int len = arr.length; //獲取數(shù)組中的所有的元素------>遍歷 
        for(int i =0 ; i < arr.length; i++) {
            // i 被當(dāng)做是數(shù)組的下標(biāo)
            System.out.println( arr[i] ); 
            }
        }
  • 增強for循環(huán)
    /*
         *  foreach循環(huán)
         * 
         *  語法:
         *                              (定義變量名)
         *   for(數(shù)組中的每一個元素的類型  遍歷出來的每一個元素  :要遍歷的數(shù)組){
         *   
         *   }
         */

String[] arr = {"cxk","lsis","wangwu","jack","rose","趙四"};
        for(String  a    :  arr) {
            System.out.println(a);
        }
        // fore    快捷鍵  alt+/
        for (String a : arr) {
            System.out.println(a);
        }

數(shù)組的默認(rèn)值

/**
 * 數(shù)組的默認(rèn)值
      基本數(shù)據(jù)類型

 *    類型                    默認(rèn)值
 *    int                     0
 *    byte                    0
 *    short                   0
 *    long                    0
 *    
 *    float                   0.0
 *    double                  0.0
 *    
 *    char                   \u0000   GBK   UTF-8    ASCII
 *    
 *    boolean                false
 *    
 *    
 *    引用數(shù)據(jù)類型
 *    String                null   所有的引用數(shù)據(jù)類型的默認(rèn)值都是null
 *    
 *    null    和        ""
      null    指的是這個變量沒有指向內(nèi)存中的某一塊空間
      ""      指向的是內(nèi)存中為""的字符串      
 *    String s1 = null;
 *    String s2 = "";
 *    
 */

數(shù)組的特點

/**
* 1、數(shù)組是定長的(數(shù)組一旦定義,長度不能改變)
* 2、數(shù)組的長度用 數(shù)組名length獲取
* 3、數(shù)組的下標(biāo)從0開始,到長度-1結(jié)束
* 4、數(shù)組中的每一個元素的類型一致的 
* 5、如果數(shù)組的下標(biāo)超出范圍,會報錯(異常)   ArrayIndexOutOfBoundsException  數(shù)組下標(biāo)越界異常
*/

測試

1、定義一個數(shù)組,  輸入一個數(shù)字,  得到這個數(shù)字在數(shù)組中的下標(biāo) (用方法做)
2、定義一個數(shù)字, 求最大值,最小值,平均值

參考代碼

/**
 *    1、定義一個數(shù)組,  輸入一個數(shù)字,  得到這個數(shù)字在數(shù)組中的下標(biāo) (用方法做) 
 *     思路:   遍歷數(shù)組,然用輸入的數(shù)字與數(shù)組的每一個元素進(jìn)行比較,如果相等,直接返回當(dāng)前元素的下標(biāo)
 *
 */
public class Test1 {
    public static void main(String[] args) {
        int[] arr = {10,29,18,7,65,11};
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入一個數(shù)字");
        int num = sc.nextInt();
        int index = method1(num,arr);
        System.out.println("您輸入的數(shù)字在數(shù)組中的下標(biāo)為"+index);
    }
    public static int method1(int num,int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if(num == arr[i]) {
                return i;
            }
        }
        return -1;
    }
}
/**
 * 2、定義一個數(shù)組, 求最大值,最小值,平均值
 * 思路:假設(shè)第一個數(shù)為最大值。與數(shù)組中的每一個元素進(jìn)行比較,元素比最大值大,就把當(dāng)前這個值賦給最大值
 *
 */
public class Test2 {
    public static void main(String[] args) {
        int[] arr = {12,45,87,24,68};
        //method(arr);
        int[] arr1 = method1(arr);
        System.out.println("數(shù)組的最大值為:"+arr1[0]);
        System.out.println("數(shù)組的最小值為:"+arr1[1]);
        System.out.println("數(shù)組的平均值為:"+arr1[2]);
    }
    //返回的是數(shù)組,將三個值放到數(shù)組中一起返回
    public static int[] method1(int[] arr) {
        int max = arr[0];
        int min = arr[0];
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if(max < arr[i]) {
                max = arr[i];
            }
            if(min > arr[i]) {
                min = arr[i];
            }
            sum += arr[i];
        }
        //定義一個數(shù)組,將最大值,最小值,平均值,放到數(shù)組中。
        int[] arr1 = {max,min,sum/arr.length};
        return arr1;
    }
    //求出最大值,最小值,平均值并輸出
    public static void method(int[] arr) {
        int max = arr[0];
        int min = arr[0];
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] > max) {
                max  = arr[i];
            }
            if(arr[i] < min) {
                min = arr[i];
            }
            sum = sum + arr[i];
        }
        System.out.println("數(shù)組的最大值為:"+max);
        System.out.println("數(shù)組的最小值為:"+min);
        System.out.println("數(shù)組的平均值為:"+sum/arr.length);
    }
}

數(shù)組排序

冒泡排序

/**
     *   對數(shù)組進(jìn)行升序排列
     * 
     * 
     * @param arr     要排序的數(shù)組
     * @return           排序之后的數(shù)組
     */
    public static int[] sort(int[] arr) {
        //  arr.length -1    比較輪數(shù)    i               外層 循環(huán)控制  比較輪數(shù)   
        for (int i = 0; i < arr.length -1; i++) {
            //arr.length -1    比如  5個數(shù)最多只能比較4次     每一輪比較的次數(shù)    j     內(nèi)層 循環(huán)控制  比較次數(shù)   
            // arr.length -1 -i    每一輪可以少比較一次
            for (int j = 0; j < arr.length -1 -i ; j++) {
                if(arr[j] > arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        return arr;
    }

  • 優(yōu)化
public static int[] sort1(int[] arr) {
        int count = 0;
        for (int i = 0; i < arr.length -1; i++) {
            //定義一個信號量 1,2,3,4,5
            boolean flag = true;
            for(int j = 0 ; j < arr.length-1 -i; j++) {
                if(arr[j] > arr[j+1]) {
                    flag = false;
                    int temp = arr[j];
                    arr[j] =arr[j+1];
                    arr[j+1] = temp;
                }
            }
            count++;
            System.out.println("這個數(shù)組比較了"+count+"輪");
            //判斷flag 
            if(flag == true) {
                return arr;
            }
        }
        return arr;
    }

  • 選擇排序
public static int[] sort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            //假設(shè)當(dāng)前這個數(shù)為最小的數(shù)字  min是這個數(shù)的下標(biāo)
            int min = i;
            for (int j = i+1; j < arr.length; j++) {
                if(arr[min] > arr[j]) {
                    min = j;
                }
            }
            //等比較結(jié)束   min所對應(yīng)的值為最小值
            //arr[i]   arr[min]      min  ==  i 
            if(min != i) {
                int temp = arr[i];
                arr[i]  = arr[min];
                arr[min] = temp;
            }
        }
        return arr;
}

二分查找法

public class Demo8 {
    public static void main(String[] args) {
        //折半查找法前提:數(shù)組必須是有序的
        int[] arr = {12,56,78,92,106,207,300};
        int index = method(107, arr);
        System.out.println(index);
    }
    public static int method(int num , int[] arr) {
        int min = 0;
        int max = arr.length -1;
        while(min <= max) {
            int middle = (max+min)/2;
            if(num > arr[middle]) {
                min = middle+1;
            }else if(num < arr[middle]) {
                max = middle -1;
            }else {
                return middle;
            }
        }
        return -1;        
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容