(1)人が諦めない限り、全世界があなたを諦めない
(2)私は大いに役立つために生まれる(3)
学ぶことの苦しみに耐えられないのなら、人生の苦しみに耐えなければならない。深い理解。
(4)難しいことをすることで得なければなりません。(
5)精神は本当の刃です。
(6)相手を2回、心の中で初めて征服します。
(7)書くのは本当に簡単ではありません。好きな場合や何か持っている場合好き+フォローまたはお気に入りを忘れないでください〜
Java SE 036Javaアレイ検索方法とバイナリ検索分析
1.配列ルックアップ
public class ArraySearchTest{
public static int search(int [] a , int value){
for(int i = 0 ; i < a.length ; i ++){
if(a[i] == value){
return i;
}
}
return -1;
}
public static void main(String [] args){
int [] a = new int[]{
1,4,2};
int value = 3;
System.out.println(search(a,value));
}
}
この種の検索は直接検索方法であり、効率が最も低く、なぜ非効率であるか、配列の長さが非常に長い場合、10000の場合、10000回比較する必要があります。この価格はかなりのものです。
2.バイナリ検索
(1)要件:検索する配列は順番に並んでいる必要があります。昇順と降順の両方が可能です。
(2)バイナリ検索とは、配列が順序付けられていることを前提に、配列を2つに分割し、真ん中の要素と検索対象の要素を直接比較することです。前の番号は検索する番号よりも小さいため、中央の番号より前の番号はすべて無視されます。それは確かに要件を満たしていません。次に、残りの番号の中央の番号を取得し、それを再度比較する番号と比較し、次に比較して、中央の番号の前の番号を除外します。
(3)簡単に言えば:ソートは中間になります
public class ArrayBinarySearchTest
{
public static int binarySearch(int [] a,int value){
int low = 0 ; //数组中第一个元素的下标
int high = a.length - 1;//数组中最后一个元素的下标
//取中间元素。它是我们要跟待比较那个value值进行比较的那个元素它的索引在什么地方。
int middle;
//什么情况下让它一直能去进行判断,只要low不大于这个high就可以一直去判断。
while(low <= high){
//确定中间元素,索引的位置
middle = (low + high)/2;
for(int i = 0 ; i < a.length; i++){
System.out.print(a[i]);
if(i == middle){
System.out.print("#");//标记一下中间元素的位置
}
System.out.print(" ");
}
System.out.println();
//用中间元素与value进行比较
if(a[middle]==value){
return middle;
}
//如果没找到,有两种情况,一种是小于value,一种是中间的元素大于value,如果中间的元素小于value,则中间元素以及中间元素左边的元素都不要,
//如果是大于的话,中间元素以及中间元素右边的也都不要
if(a[middle]<value){
low = middle + 1;//即将中间的元素与中间元素左边的元素都过滤掉,这时对最右边元素下标没有影响,只对最左边元素下标有影响
}
if(a[middle]>value){
high = middle-1;//即将中间的元素与中间元素右边的元素都过滤掉。这时对最左边元素下标没有影响,只对最右边元素下标有影响
}
}
return -1;
}
public static void main(String [] args){
int[] a = new int[]{
11,22,44,992,809,928,443,222};
//冒泡排序
for(int i = 0 ; i < a.length-1; i++){
//为何length-1,length-1就是最后一个元素的下标
for(int j = 0 ; j < a.length-i-1; j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
int value = 1;
int index = binarySearch(a,value);
System.out.println(index);
}
}