排序查寻

排序查找

对一个数组进行一个数据的查找,首先进行一个排序,然后再进行折半查找!

 

 /**
   * 直接插入排序
   * @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;

 }

分析:待续