接著上一章在塔,繼續(xù)學(xué)習(xí)數(shù)組中涉及到的常見算法
常見算法
如何實(shí)現(xiàn)數(shù)組的反轉(zhuǎn)胳搞?
/*
* 實(shí)現(xiàn)數(shù)組的反轉(zhuǎn)
*/
public class Test {
public static void main(String[] args) {
String[] arr = new String[] {"JJ","GG","MM","DD","CC","LL"};
//反轉(zhuǎn)方法一:
// for(int i=0; i<arr.length / 2; i++) {//到中間就不用再換了
// //首元素和尾元素相互調(diào)換
// String temp = arr[i];
// arr[i] = arr[arr.length-1-i];
// arr[arr.length-1-i] = temp;
// }
//反轉(zhuǎn)方法二:
for(int i=0,j=arr.length-1; i<j; i++,j--) {
String temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
如何實(shí)現(xiàn)在數(shù)組中(線性)查找元素的下標(biāo)?
/*
* 實(shí)現(xiàn)數(shù)組元素的查找(線性查找)
*/
public class Test {
public static void main(String[] args) {
String[] arr = new String[] {"JJ","GG","MM","DD","CC","LL"};
//設(shè)置一個標(biāo)識
boolean isFlag = true;
//查找CC
String dest = "CC";
for(int i=0; i<arr.length; i++) {
if(dest.equals(arr[i])) {//這是String類的對比語句
System.out.println("恭喜姥闪!找到了始苇!");
System.out.println("元素下標(biāo)為:" + i);
isFlag = false;//標(biāo)識改為false
break;
}
}
if(isFlag) {//如果是true,就輸出沒有找到
System.out.println("很遺憾沒有找到筐喳!");
}
}
}
如何實(shí)現(xiàn)在數(shù)組中(二分法)查找元素的下標(biāo)催式?
二分法查找,就是先取到數(shù)組的一個中間值避归,然后把要對比的值和中間值做對比荣月。中間值大了,就把中間值再減一半梳毙。中間值小了哺窄,就把中間值增大。
例如:圖中要取5,中間值是10萌业,中間值大了坷襟,所以把中間值后面的數(shù)組砍掉。然后再在新的數(shù)組中取中間值生年,繼續(xù)比較直到找到為止婴程。
二分法圖解
/*
* 實(shí)現(xiàn)數(shù)組的二分法查找
* 前提:所要查找的數(shù)組必須有序!
*/
public class Test {
public static void main(String[] args) {
//定義一個數(shù)組
//前提:所要查找的數(shù)組必須有序抱婉!
int[] array = new int[]
{-95,-56,-26,-17,-5,0,1,35,67,98,300,412};
boolean isFlag = true;
int num = 412;
//定一個頭尾
int first = 0;
int end = array.length-1;
while(first <= end) {//頭不能超過尾
//二分法需要的中間值
int middle = (end+first)/2;
if(num == array[middle]) {
System.out.println("恭喜你找到了档叔!");
System.out.println("下標(biāo)為:" + middle);
isFlag = false;
break;
}else if(num < array[middle]) {
//要找的值比中間值還小,就把后面的值去掉
end = middle - 1;
}else {//num > array[middle]
//要找的值比中間值還大蒸绩,就把前面的值去掉
first = middle + 1;
}
}
if(isFlag) {
System.out.println("很遺憾沒找到衙四!");
}
}
}