排序查寻
对一个数组进行一个数据的查找,首先进行一个排序,然后再进行折半查找!
/**
* 直接插入排序
* @param data
*/
public static void insertSort(int [] data)
{
//i为第几趟排序,第一趟初始化数据(1),对顺序表Data中的记录Data[1...n]按递增序进行插入排序
for(int i =2 ; i< data.length ; i++)
{
int tempdata = 0 ;
if(data[i] < data[i-1])
{
tempdata = data[i];
data[i] = data[i-1];
//从右向左在有序区 Data[1..i-1]中查找Data[i]的插入位置
for(int j =i-2; j>=0&&tempdata<data[j] ; j--)
{
// 向后移位
data[j+1] = data[j];
// 在正确的位置插入正确的数据
data[j]= tempdata ;
}
}
}
}
/**
* 折半查询
* @param a
* @param b
* @return
*/
public static int find1(int[] a, int b) {
int low = 1;
int high = a.length;
//只有当low的值小于等于high时,才需要进行查找
while (low <= high)
{
//middle为长度
int middle = (low + high) / 2;
//在左边继续查找
if (b < a[middle - 1])
{
high = middle - 1;
//find(a,b);
}
//在右边查找
else if (b > a[middle - 1])
{
low = middle + 1;
// find(a,b);
}
// 找到了
else if (b == a[middle - 1])
{
System.out.println(middle);
return middle;
}
}
//没找到
System.out.println(-1);
return -1;
}
分析:待续