1. 程式人生 > >Java簡單演算法(陣列)

Java簡單演算法(陣列)

 找出陣列中的最大值

//找出陣列中的最大值
    static void getMax() {
        int a[] = {15, 35, 18, 87, 48, 6, 84, 57, 98};
        int max = a[0];
        for (int i = 1; i < a.length; i++) {
            if (max < a[i]) {
                max = a[i];
            }
        }
        System.out.println(max);
    }

 算出陣列中資料的平均值

//算出陣列中資料的平均值
    static void getArray() {
        int b[] = {15, 35, 18, 87, 48, 6, 84, 57, 98};
        int sum = b[0];
        int array;
        for (int j = 1; j < b.length; j++) {
            sum = sum + b[j];
        }
        array = sum / b.length;
        System.out.println(array);
    }

 把陣列倒序並遍歷

//把陣列倒序並遍歷
    static void getSunxu() {
        int c[] = {15, 35, 18, 87, 48, 6, 84, 57, 98};
        int d[] = new int[c.length];
        for (int i = 0; i < c.length; i++) {
            d[c.length - 1 - i] = c[i];
        }
        for (int j : d
        ) {
            System.out.println(j);
        }
    }

 拷貝陣列

//拷貝陣列
    static void arrayCopy() {
        int a[] = {1, 2, 3, 4, 5};
        int b[] = {6, 7, 8, 9, 10};
        System.arraycopy(a, 1, b, 2, 3);//拷貝哪個陣列,從第幾個開始,拷到哪個陣列,從第幾個開始
        for (int i : b
        ) {
            System.out.println(i);
        }
    }

 搜尋key在陣列的哪個位置

//搜尋key在陣列的哪個位置
    static void Search() {
        int a[] = {6, 5, 4, 3, 2, 1};
        int key = 1;
        Arrays.sort(a);
        System.out.println(Arrays.binarySearch(a, key));
    }

 二分查詢

//二分查詢
    static int erfen(int key) {
        int[] a = {9, 8, 7, 6, 5, 4, 3, 2, 1};
        int lo = 0;
        int hi = a.length - 1;
        Arrays.sort(a);//1,2,3,4,5,6,7,8,9
        while (lo <= hi) {
            int mid = (hi + lo) / 2;
            if (key < a[mid]) {
                hi = mid - 1;
            } else if (key > a[mid]) {
                lo = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }

 遍歷二維陣列

//遍歷二維陣列
    static void Test() {
        int[][] a = {{1, 2, 3, 4, 5}, {6, 7, 8}};
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j]);
            }
        }
        System.out.println();
        for (int[] i : a) {
            for (int j : i) {
                System.out.print(j);
            }
        }
    }

 遍歷三維陣列

//遍歷三維陣列
    static void go() {
        int[][][] a = {{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}}};
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                for (int k = 0; k < a[i][j].length; k++) {
                    System.out.print(a[i][j][k]);
                }
            }
        }
        System.out.println();
        for (int i[][] : a
        ) {
            for (int j[] : i
            ) {
                for (int k : j
                ) {
                    System.out.print(k);
                }
            }
        }
    }
}

 判斷是否為閏年,以及年齡段

//判斷是否為閏年,以及年齡段
    public static void half() {
        int year = 2000;
        int age = 45;
        if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
            System.out.println("閏年");
        } else {
            System.out.println("不是閏年");
        }
        if ((20 < age) && (age <= 40)) {
            System.out.println("青年人");
        } else if ((40 < age) && (age <= 60)) {
            System.out.println("中年人");
        } else if (60 < age) {
            System.out.println("老年人");
        }
    }

 用switch輸出春夏秋冬

//用switch輸出春夏秋冬
    static void nice() {
        int month = 1;
        switch (month) {
            case 12:
            case 1:
            case 2:
                System.out.println("冬天");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("春天");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏天");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋天");
                break;
        }
    }

 按分數輸出等級

//按分數輸出等級
    static void rng() {
        int grade = 85;
        int level = grade / 10;
        switch (level) {
            case 9: {
                System.out.println("5");
                break;
            }
            case 8: {
                System.out.println("4");
                break;
            }
            case 7: {
                System.out.println("3");
                break;
            }
            case 6: {
                System.out.println("2");
                break;
            }
            case 5: {
                System.out.println("1");
                break;
            }
        }
    }

輸出特定格式 

//輸出特定格式
    static void rw() {
        for (int i = 1; i < 4; i++) {
            for (int j = 1; j < 10; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

//結果:
*********
*********
*********
-----------------------------------------------------------------------------------------
    static void jd() {
    int s = 2;
    for (int i = 1; i < 5; i++) {
        for (int j = 0; j < s; j++) {
            System.out.print(s);
        }
        s = s + 2;
        System.out.println();
    }
}
//結果:
22
4444
666666
88888888
-----------------------------------------------------------------------------------------
    static void sn() {
        String sb = "*";
        for (int i = 1; i < 5; i++) {
            for (int j = 0; j < 10-i; j++) {
                System.out.print(" ");
            }
            sb = sb+"*";
            System.out.println(sb);
        }
    }
//結果:
         **
        ***
       ****
      *****
-----------------------------------------------------------------------------------------
    static void start(){
        for (int i=1;i<10;i++){
            for (int j=1;j<i+1;j++){
                System.out.print(i+"*"+j+"="+i*j+" ");
            }
            System.out.println();
        }
    }
//結果:
1*1=1 
2*1=2 2*2=4 
3*1=3 3*2=6 3*3=9 
4*1=4 4*2=8 4*3=12 4*4=16 
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
-----------------------------------------------------------------------------------------
//小明想攢100元錢,媽媽每天給2.5元,每五天小明花6元,多少天能攢到100元錢?
    static void skt() {
        int day = 0;
        int moneyday = 0;
        double summoney = 0.0;
        double money = 2.5;
        while (summoney <= 100) {
            summoney = summoney + money;
            day++;
            moneyday++;
            if (moneyday % 5 == 0) {
                summoney = summoney - 6;
            }
        }
        System.out.println(day);
    }
//結果:
74

 ##氣泡排序##

//##氣泡排序##
//特點:效率低,實現簡單
//思想:每一趟將待排序序列中最大元素移到最後,剩下的為新的待排序序列,重複上述步驟直到排完所有元素。 
//這只是氣泡排序的一種,當然也可以從後往前排。
public void bubbleSort(int array[]) {
		int t = 0;
		for (int i = 0; i < array.length - 1; i++)
			for (int j = 0; j < array.length - 1 - i; j++)
				if (array[j] > array[j + 1]) {
					t = array[j];
					array[j] = array[j + 1];
					array[j + 1] = t;
				}
	}

 ##選擇排序##

//##選擇排序##
//特點:效率低,容易實現。
//思想:每一趟從待排序序列選擇一個最小的元素放到已排好序序列的末尾,剩下的為待排序序列,
//重複上述步驟 直到完成排序。
public void selectSort(int array[]) {
		int t = 0;
		for (int i = 0; i < array.length - 1; i++){
			int index=i;
			for (int j = i + 1; j < array.length; j++)
				if (array[index] > array[j])
					index=j;
			if(index!=i){ //找到了比array[i]小的則與array[i]交換位置
				t = array[i];
				array[i] = array[index];
				array[index] = t;
			}
		}
	}

 ##插入排序##

//##插入排序##
//特點:效率低,容易實現。
//思想:將陣列分為兩部分,將後部分元素逐一與前部分元素比較,如果前部分元素比array[i]小,
//就將前部分元素往後移動。當沒有比array[i]小的元素,即是合理位置,在此位置插入array[i]
public void insertionSort(int array[]) {
		int i, j, t = 0;
		for (i = 1; i < array.length; i++) {
			if(a[i]<a[i-1]){
				t = array[i];
				for (j = i - 1; j >= 0 && t < array[j]; j--)
					array[j + 1] = array[j];
				//插入array[i]
				array[j + 1] = t;
			}
		}
}

 ##快速排序##

//快速排序
//特點:高效,時間複雜度為nlogn。
//採用分治法的思想:首先設定一個軸值pivot,
//然後以這個軸值為劃分基準將待排序序列分成比pivot大和比pivot小的兩部分,
//接下來對劃分完的子序列進行快排直到子序列為一個元素為止。
public void quickSort(int array[], int low, int high) {// 傳入low=0,high=array.length-1;
		int pivot, p_pos, i, t;// pivot->位索引;p_pos->軸值。
		if (low < high) {
			p_pos = low;
			pivot = array[p_pos];
			for (i = low + 1; i <= high; i++)
				if (array[i] > pivot) {
					p_pos++;
					t = array[p_pos];
					array[p_pos] = array[i];
					array[i] = t;
				}
			t = array[low];
			array[low] = array[p_pos];
			array[p_pos] = t;
			// 分而治之
			quickSort(array, low, p_pos - 1);// 排序左半部分
			quickSort(array, p_pos + 1, high);// 排序右半部分
		}