1. 程式人生 > 其它 >Java無序陣列排序後實現二分查詢

Java無序陣列排序後實現二分查詢

技術標籤:java資料結構演算法二分查詢遞迴演算法

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(該中間陣列的下標值),結束

3.如果以上不成立,再判斷arr[mid](中間陣列的值)是不是小於需要查詢的值,如果小於,則說明key(查詢的值)在陣列右邊,那麼給mid附值給一個新的開始值newstart,然後遞迴,start的值改變為newstart
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的下標值。
在這裡插入圖片描述