更多查找可以参考 http://www.cnblogs.com/liuling/p/2013-7-24-01.html 这是别人的资源,感觉写的很全。可以仔细研究一下。 /* 使用折半查找的前提是数据是有序(升序)的。 */ class HalfSearchDemo { public static void main(String[] args) { int[] arr={1,2,3,6,2,3,5,1,8,9,3,5,2}; sop("关键字的位置:"+halfSearch_2(arr,6)); System.out.println("Hello World!"); } public static int halfSearch_2(int[] arr,int key){ SearchSort(arr); int max=arr.length-1,min=0,mid; while(min<=max){//注意是"<=" mid=(min+max)/2; if(key>arr[min]) min=mid+1; else if(key<arr[max]) max=mid-1; else return mid; } return -1; } public static void PubbleSort(int[] arr) //冒泡排序,首先确定最后一个位置上的元素 { for(int i=0;i<arr.length-1;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[j]>arr[j+1]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(int k=0;k<arr.length;k++) sop(arr[k]); } public static void SearchSort(int[] arr) //选择排序,首先确定第一个位置上的元素 { for(int i=0;i<arr.length-1;i++) { for(int j=i+1;j<arr.length;j++) { if(arr[i]>arr[j]) { int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } for(int k=0;k<arr.length;k++) sop(arr[k]); } public static void sop(Object obj) { System.out.println(obj); } }
//下面是折半查找的另一种表现形式:
public static int halfSearch(int[] arr,int key){ SelectSort(arr); int max=arr.length-1; int min=0; int mid=(max+min)/2; while(arr[mid]!=key){ if(key>arr[mid]) min=mid+1; if(key<arr[mid]) max=mid-1; if(min>max) return -1;//找不到目标元素 mid=(max+min)/2; } return mid;//跳出循环后,表明已经找到目标元素,此时返回目标元素的index。 }
时间: 2024-11-10 19:51:15