二分法 遞迴查詢普通查詢 氣泡排序
阿新 • • 發佈:2018-12-16
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); }
}