Java無序陣列排序後實現二分查詢
阿新 • • 發佈:2021-01-07
1.氣泡排序
對無序陣列進行排序方法,引數為無序陣列,return有序陣列。
外部的for迴圈是對每一個值進行內部的for迴圈,
內部for迴圈是把最大值放到陣列的最後一個
public static int[] mao(int[] arr){
for(int j=0;j<arr.length;j++) {
//
for(int i = 0;i<arr.length-1;i++) {
if(arr[i]>arr[i+1]) {
int da=arr[i];
int xiao=arr[i+1];
arr[i]=xiao;
arr[i+1]=da;
}else {
continue;
}
}
}
return arr;
}
2.遞迴方法實現二分查詢法
1.二分查詢輸入查詢值,返回查詢值的陣列下標(查詢的陣列arr,陣列的開頭start,陣列的結尾end,查詢的值key)
先判斷輸入的start(開頭)是否比end(結尾)大,如果比end(結尾)大返回-1;
2.在以上的大範圍之下,最先的是對arr[mid](開頭的值和結尾的值與中間陣列的值)進行判斷,如果和key(查詢的值)的陣列一樣,返回mid(該中間陣列的下標值),結束
4.如果以上也不成立,那麼就只剩下arr[mid]>key,則說明key(查詢的值)在陣列左邊,給mid附值給一個新的結束值newend,然後遞迴,end的值改變為newend
public int erfenchazhao(int[] arr,int start,int end,int key) {
if(start>end) {
//如果輸入的陣列開頭比結尾大那麼直接結束,返回負一
return -1;
}else {
int mid = (end-start)/2;
//新建中間值mid
if(arr[mid]==key)
//中間值和查詢值一樣
{
return mid;
}else if(arr[mid]<key)
//中間值比查詢值小,查詢值在它右邊,捨棄陣列左邊,中間值變成新的開始值,遞迴直到查詢和中間相等返回中間值mid。
{
int newstart = mid;
return erfenchazhao(arr,newstart,end,key);
}else
//中間值比查詢值大,查詢值在它左邊,捨棄陣列右邊,中間值變成新的結束值,遞迴直到查詢和中間相等返回中間值mid。
{
int newend =mid;
return erfenchazhao(arr,start,newend,key);
}
}
}
3主方法測試
public static void main(String[] args) {
int arr[]= {6,9,2,10,18,27,48,1,44};
maopao m=new maopao();
int houarr[]=m.mao(arr);
for(int i:houarr) System.out.print(i+" ");
//排序後,輸出有序陣列
System.out.println();
Test1 test1=new Test1();
System.out.println(test1.erfenchazhao(houarr, 0, houarr.length-1, 10));
//輸出查詢值的下標值
}
最終結果:查詢10返回陣列值為10的下標值。