java實現數組練習(折半查找、冒泡排序、數組逆序……)

Java中提供了java.util.Arrays包,包含了一些操作數組的常用方法
什麼是包?

例如做一碗油潑面, 需要先和麪, 擀麪, 扯出麪條, 再燒水, 下鍋煮熟, 放調料, 潑油.
但是其中的 “和麪, 擀麪, 扯出麪條” 環節難度比較大, 不是所有人都能很容易做好. 於是超市就提供了一些直接已
經扯好的麪條, 可以直接買回來下鍋煮. 從而降低了做油潑面的難度, 也提高了製作效率.
程序開發也不是從零開始, 而是要站在巨人的肩膀上.
已經有大量的標準庫(JDK提供好的代碼)和海量第三方庫(其他機構組織提供的代碼)供我們使用,這些代碼就放在一個一個的包中。

1.數組轉字符串

public class LearnArrays {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        System.out.println(arrToString(arr));
        System.out.println(Arrays.toString(arr));
    }
    public static String arrToString(int[] arr){
        String ret="[";
        for(int i=0;i<arr.length;i++){
            ret+=arr[i];
            if(i!=arr.length-1){
                ret+=", ";
            }
        }
        ret+="]";
        return ret;
    }
}

結果:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

2.數組拷貝
這裏我介紹一個數組拷貝的函數

public class LearnArrays {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        int[] newarr=Arrays.copyOf(arr, arr.length);
        System.out.println(Arrays.toString(newarr));
    }
}

copyOf 是將數組進行了 深拷貝, 即又創建了一個數組對象, 拷貝原有
數組中的所有元素到新數組中. 因此, 修改原數組, 不會影響到新數組.

自我實現:

import java.util.Arrays;

/**
 * LearnArrays
 */
public class LearnArrays {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        int[] newarr=Arrays.copyOf(arr, arr.length);
        System.out.println(Arrays.toString(newarr));
        int[] newarr2=copyarr(arr);
        System.out.println(Arrays.toString(newarr2));
    }
    public static int[] copyarr(int[] arr){
        int[] newarr2=new int[arr.length];
        for(int i=0;i<newarr2.length;i++){
            newarr2[i]=arr[i];
        }
        return newarr2;
    }
}

3.找出數組最大元素
打擂臺思想解決:

import java.util.Arrays;

/**
 * LearnArrays
 */
public class LearnArrays {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        LearnArrays maxvalue=new LearnArrays();
        System.out.println(maxvalue.findMax(arr));

    }
    public int findMax(int[] arr){
        int maxValue=arr[0];
        for(int i=0;i<arr.length;i++){
            if(arr[i]>arr[0]){
                maxValue=arr[i];
            }
        }
        return maxValue;
    }
}

4.求平均數

public class LearnArrays {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        LearnArrays arrays=new LearnArrays();
        System.out.println(arrays.Average(arr));
    }
    public double Average(int[] arr){
        int sum=0;
        for(int i=0;i<arr.length;i++){
            sum+=arr[i];
        }
        return (double)sum / (double)arr.length;
    }
}

結果注意用double來表示

5.查找數組中指定元素(二分查找法)
適用於有序數組

import java.util.Arrays;

/**
 * LearnArrays
 */
public class LearnArrays {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        System.out.println(binarySearch(arr, 5));
    }
    public static int binarySearch(int[] arr,int tofind){
        int left=0;
        int right=arr.length-1;
        int mid;
        while(left<=right){
            mid=(left+right)/2;
            if(tofind<arr[mid]){
                right=mid-1;
            }
            else if(tofind>arr[mid]){
                left=mid+1;
            }
            else{
                return mid;
            }
        }
        return -1;
    }
}

6.檢查數組的有序性
給定一個整型數組,判斷是否有序。

import java.util.Arrays;

/**
 * LearnArrays
 */
public class LearnArrays {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        // System.out.println(binarySearch(arr, 5));
        System.out.println(isSort(arr));
    }
    public static boolean isSort(int[] arr){
        for(int i=0;i<arr.length-1;i++){
            if(arr[i]>arr[i+1]){
                return false;
            }
        }
        return true;
    }
}

注意:在數組比較的時候,比較arr.length-1次,否則會下標越界拋出異常

7.冒泡排序

public class LearnArrays {
    public static void main(String[] args) {
        int[] arr={9,5,2,7};
        LearnArrays arrays=new LearnArrays();
        arrays.bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }
    public void bubbleSort(int[] arr){
        for(int bound=0;bound<arr.length;bound++){
            for(int cur=arr.length-1;cur>bound;cur--){
                if(arr[cur-1]>arr[cur]){
                    int tmp=arr[cur];
                    arr[cur]=arr[cur-1];
                    arr[cur-1]=tmp;
                }
            }
        }
    }
}

Java內置了更高效的排序算法

        int[] arr={9,5,2,7};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

8.數組逆序:

public class LearnArrays {
    public static void main(String[] args) {
        int[] arr={9,5,2,7};
        reverse(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void reverse(int[] arr){
        int left=0;
        int right=arr.length-1;
        while(left<right){
            int tmp=arr[left];
            arr[left]=arr[right];
            arr[right]=tmp;
            left++;
            right--;
        }
    }
}

9.數組數字排列

public class LearnArrays {
    public static void main(String[] args) {
        int[] arr={9,5,2,7};
        LearnArrays arrays=new LearnArrays();
        arrays.transform(arr);
        System.out.println(Arrays.toString(arr));
    }
    public void transform(int[] arr){
        for(int bound=0;bound<arr.length;bound++){
            for(int cur=arr.length-1;cur>bound;cur--){
                if(arr[cur-1]%2==0&&arr[cur]%2!=0){
                    int tmp=arr[cur];
                    arr[cur]=arr[cur-1];
                    arr[cur-1]=tmp;
                }
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章