/*1.从第一个元素开始,该元素可以认为已经被排序; 2.取出下一个元素,在已经排序的元素序列中从后向前扫描; 3.如果该元素(已排序)大于新元素,将该元素移到下一位置; 4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置; 5.将新元素插入到该位置后; 6.重复步骤2~5。 */ public class test4 { public static void main(String[] args) { Random random=new Random(); int t=0; int j=0; int a[]={2,44,5,48,75,98,51,16,54,10}; for (int i = 0; i <a.length-1; i++) { j=i; t=a[i+1]; while(a[j]>t&&j>=0){ a[j+1]=a[j]; j--; } a[j+1]=t; } System.out.println(Arrays.toString(a)); System.out.println(search(16,a )); } /*1.确定查找范围front=0,end=N-1,计算中项mid=(front+end)/2。 2.若a[mid]=x或front>=end,则结束查找;否则,向下继续。 3.若a[mid]<x,说明待查找的元素值只可能在比中项元素大的范围内,则把mid+1的值赋给front,并重新计算mid,转去执行步骤2;若a[mid]>x,说明待查找的元素值只可能在比中项元素小的范围内,则把mid-1的值赋给end,并重新计算mid,转去执行步骤2。 */ public static int search(int num,int a[]) { int low=0; int high=a.length-1; int notfind=-1; while(low<=high){ int middle = low + (high - low) / 2; if(a[middle]>num){ high=middle-1; }else if(a[middle]<num){ low=middle+1; } else{ return middle; } } return notfind; } }