1. 程式人生 > >二分法 遞迴查詢普通查詢 氣泡排序

二分法 遞迴查詢普通查詢 氣泡排序

public class intSearch { public static void sort(int []a) { //java中陣列有length屬性可以直接用

	  int temp;
	  for(int i=0;i<a.length-1;i++) {
		  for(int j=0;j<a.length-1-i;j++) {
			  if (a[j]>a[j+1]) {
               temp=a[j];
               a[j]=a[j+1];
               a[j+1]=temp;
			  }
		  }
	  }
  }
  //折半查詢的前提是陣列元素必須是有序的
  //非遞迴方法如下
  public static int erfenrearch(int[]a,int x) {
	  //使用遞迴和非遞迴兩種方式查詢一個整數
	  int f=0;//指向頭
	  int r=a.length-1;//(#`O′)
	  while(f<=r)//頭指標在尾指標的前邊
	  {
		  int m=(f+r)/2;
		  //定義一箇中間的指標
		  if (a[m]==x)return m;//返回位置
		  else if(a[m]>x) r=m-1;
		  else if(a[m]<x) f=m+1;
	  }
	  return -1;//如果頭指標比尾指標大說明沒有查詢到元素的值
	  //停止查詢返回負數
	  
  }
  //遞迴方法
  public static int hh(int []a,int f,int r,int x) {

	  int m=(f+r)/2;
	  if (f>r)return -1;
	  else {
		  if (x>a[m])//如果此處小於n往後找 
		  {
			return hh(a,m+1,r,x);  
		  }
		  else if(x<a[m]) {
			  return hh(a,f,m-1,x);
		  }
		  else //這是相等的情況
		  {return m;}
	  }
  }

}

Main: import java.util.Scanner; public class Main {

public static void main(String[] args) {
	// TODO Auto-generated method stub
      Scanner scan=new Scanner(System.in);
      int n=scan.nextInt();
      int[] a=new int[n];
      for(int i=0;i<n;i++) {
    	  a[i]=scan.nextInt();
      }
      scan.close();
      intSearch.sort(a);
      
      for(int i=0;i<a.length;i++) {
    	  System.out.println(a[i]);
      }//測試輸出成功
      int m= intSearch.erfenrearch(a, 5);
      int x=intSearch.hh(a, 0, a.length-1,5);
      System.out.print(m+1);
      System.out.print(x+1);
}

}