數組排序?這些你瞭解嗎?

什麼是數組?

      同一種類型數據的集合,也就是一個容器。運算的時候有很多數據參與運算,那麼首先需要做的是什麼.不是如何運算而是如何保存這些數據以便於後期的運算,那麼數組就是一種用於存儲數據的方式,能存數據的地方我們稱之爲容器。

 

數組的本質:

    就是去申請一串連續的內存空間,這個對象arr就指向這個這串內存單元的第一個值

 

數組的好處:

    當我們需要求1000個學生的平均分的時候,不可能去找1000個變量賦值,這樣可以,只不過太過於麻煩,於是,引進來了數組,它能給存進來的數據進行自動編號,注意編號從零開始,方便操作這些數據。

 

數組的聲明大致分爲兩種:


    ①聲明數組的同時,指定它的長度

    ②聲明數組的同時,指定裏面的值

比如:

    ①int arr[] = new int[10];指定數組長度爲10

    ②int arr[] = {1,2,3,4,5}指定裏面的值

二維數組的聲明和一維數組其實都一樣,只是多了一個索引值。

    ①int arr[][] = new int[10][10];

 

 

    ②int arr[][] = {{1,2,3,4,5},{1,2,3,4,5}};

 

 

 

     1)數組裏面存的都是同一類型數據的集合

           a. 即可以是基本類型,也可以是對象類型;

           b. 數組中的每個數據爲元素;

    2) 數組是一個對象,成員是數組長度和數組中的元素;
    3) 聲明瞭一個數組變量並不是創建了一個對象;

 

數組的遍歷:


    我們知道拿到數組裏的值,其實就是把它的下標依次改變就行了,下標從0開始,所以,我們可以通過for循環去遍歷數組、或者foreach(也叫增強for循環)去遍歷,其遍歷的方式爲:

拿一維數組舉例:

 

 

 

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

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

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

    }

(2)for(int i:arr){

        System.out.println(i);

    }(1)for(int i = 0;i<arr.length;i++){

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

    }

(2)for(int i:arr){

        System.out.println(i);

    }


    當我們的數組中沒有值時,它們都有默認值。

    下面是對應的默認值:

          byte/short/int/long      0
          float                            0.0f
          double                       0.0d
          String                        null
          char                          '\u0000'

          boolean                    false

 

 

 

 

放大數組:


    怎麼把一個數放到一個指定長度數組裏,可是這個數組裏都有值,沒地方去存,可以先將這個數組進行放大,通過arr =Arrays.copeOf(arr,arr.length+1)此時的arr已經進行了長度+1,並最後一位有個初值0,然後可以通過fill進行填充


複製數組copyOf(arr,int newlenth)

數組查詢 binarySearch(Object[]arr,Object key)使用的前提: 數據排好序

int a = Arrays.binarySearch(arr,3);

如果存在多個值,查詢的時候會從前往後一次查找,直到找到一個這個值爲止,後面還有也不會繼續查找。

給數組從小到大進行排序

Arrays.sort(arr);

 

 

 

 

 

數組的排序分爲兩種:

 

 

 

 

①冒泡排序


     相隔的數去做比較,大的像後冒泡,通過一直去循環,最後小的都在前面,大的在後面。

 

 

 


 

 

 


int arr[] ={7,5,6,2,4,3,1};//聲明一個數組
for (int i = 1;i<arr.length;i++){//循環數組中的所有元素
    int index=0;//聲明變量用來接收較大的那個下標
    for (int j = 1;j<=arr.length-i;j++){
            if (arr[j] > arr[index]){//如果arr[j]大於arr[index] 進入判斷
                index = j;//把j 賦值給 index
            }
        }
    int midd = arr[index];//兩個值去交換,需要一箇中間值midd
    arr[index] = arr[arr.length-i];//arr[index]就是最後一個元素
    arr[arr.length-i]=midd;
}

 

②選擇排序


    拿到第一個數依次和後面所有的值作比較,如果小於則交換位置,最後找到第一個最小值,然後再以此類推,完成排序。

 

 

 

 


int min = 0;
for(int i =0;i<arr.length;i++){
    int index = i;
    for(int j =i+1;j<arr.length;j++){
        if(arr[index]>arr[j]){
            index = j;
        }
    }
    min = arr[index];
    arr[index] = arr[i];
    arr[i] = min;
}

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章