1. 程式人生 > >java 基礎知識-陣列的7種演算法(排序、求和、最值、遍歷...)

java 基礎知識-陣列的7種演算法(排序、求和、最值、遍歷...)

遍歷
遍歷就是把這個陣列的每個元素 顯示出來 遍歷的方法就是先定義這個陣列的大小,然後用FOR迴圈來完成陣列,例如
double[] score = new double[5];
		Scanner input = new Scanner(System.in);
		for (int i = 0; i < score.length; i++) {
			System.out.println("請輸入第" + (i + 1) + "位同學的成績:");
			score[i] = input.nextDouble();
		}
		for (int i = 0; i < 5; i++) {
			System.out.println(score[i]);
		}
這個就是一個double 型的陣列用for去遍歷每個元素 而結束條件就是這個陣列的最後一個數組 score.length就可以遍歷這個陣列了

求和
求和就是在遍歷的基礎上新增一個求和的計數器 就在在for外面定義一個和的變數 這個變數的初始值是0
這樣就能達到求和的結果是正確的
求和的公式在for迴圈裡面寫這樣的目的是因為求和也是在迴圈的往上加的過程
例如
double sum = 0;
		int i;
		for (i = 0; i < score.length; i++) {
			sum = sum + score[i];
		}
		System.out.println(score.length + "位同學的成績是" + sum);
這個就是求和的過程 其他的運算方法就是把這個符號更改下而已

極值
極值的目的就是求一個極端的值
方法就是假定數組裡面的一個數據是最大的然後用其他的資料遍歷他與他進行對比 如果新的資料值比這個定義的值大的話那麼就替換他的這個位置然後繼續遍歷 遍歷結束後就輸出這個值就是最大的值或者最小的值  例如
double max = score[0];
		for (i = 0; i < score.length; i++) {
			if (score[i] > max) {  //這裡的大於號變成小於號就可以求最小值了
				max = score[i];
			}
		}
		System.out.println(i + "位同學的最高成績是" + max);
這個程式碼就是求一個極值而且是最大的內個

查詢 

這個功能就是查詢當前的陣列是否有你需要的值 就好像你去一個地方去找人是一個意思 


查詢用到了boolean變數 因為這個功能的目的就是找到與沒找到 換句話來說就是 找到了就是真(或假) 沒找到就是假(或真)
for迴圈裡面寫的if判斷 
判斷方法就是當用戶輸入的值與陣列中的某一個值是一樣的那麼就輸出 否則(else)就沒找到 輸出不輸出隨便你
還要判斷下用boolean就可以做到 如果是真那麼就跳出這個迴圈並且進入下一個迴圈 因為boolean在跳出的時候變化成真了 那麼在下面的if裡面就是以真的形式出現並且輸出
例如
boolean flag = false;
		System.out.println("請輸入您要查詢的分數:");
		double findScore = input.nextDouble();
		for (i = 0; i < score.length; i++) {
			if (score[i] == findScore) {
				flag = true;//變真了
				break;//跳出這個for迴圈進入下面的if迴圈
			}
		}
		if (flag) {//由於是上面的boolean變成真了 所以就進入這個if 如果沒找到就跳刀下面的else
			System.out.println("找到了您所要查詢的分數。" + score[i]);
		} else {
			System.out.println("沒有找到您所要查詢的分數。");
		}

這個就是 
倒置
倒置的意思就是最後一個元素變成第一個元素第一個元素變成最後一個
過程就是折中取半
不遍歷整個陣列了遍歷一半,那麼就/2就可以 但是計算機數數的方法是從0開始的也就是說最後一個值裡面是沒有任何意義的 所以要在最後一個值那-1
並且還要定義一個空的變數  因為要用到三步換值(變數) 不定義也可以 
例如
for (i = 0; i < score.length / 2; i++) {
			double temp = score[i]; //這裡是空變數賦值 三步賦值第一步
			score[i] = score[score.length - 1 - i];//右邊的值賦到左邊那麼右邊就變成空的值
			score[score.length - 1 - i] = temp;//同上  但是這個temp是個臨時的值所以他最後是空的沒有
		}
		for (i = 0; i < score.length; i++) {
		   System.out.println(score[i]);
		} 

排序

排序是引用的JAVA自帶的一個類 所以沒有難度
例如
Arrays.sort(score);//這個程式碼就是內個排序的類
		for (i = 0; i < score.length; i++) {
			System.out.println(score[i]);
		}
 
插入
插入的意思就是在這個陣列中某一個地方插入一個變數(值)
但是一旦插入的這個變數進去那麼就會對這個陣列產生變化所以陣列一定要空出多餘的地方
並且要對插入進來的 資料進行判斷,判斷結束後還要跳出這個判斷的if,判斷的條件就是:輸入進來的值大於數組裡的某一個值並且小於這個值前面的那一個值(num[i]-1) 
替換這個值跳出
進入下一個迴圈 
例如
int[] num = new int[6];
		for (i = 0; i < num.length; i++) {
			num[i] = input.nextInt();
		}
		Arrays.sort(num);
		System.out.println("輸入您要插入的數:");
		int insert = input.nextInt();
		for (i = 0; i < num.length; i++) {
			if ((insert > num[i]) && (insert < num[i - 1])) {
				num[i] = insert;
				break;
			}
		}
		for (i = 0; i < num.length; i++) {
			System.out.println(num[i]);
		}
陣列的7個演算法100%全在遍歷的過程 每個都是  每個演算法裡面都有一個for是在遍歷