java 二分法查找排序,插入排序,折半查找算法


import java.util.*;


/*  

*二分法排序和插入

*/

class Main21

{

public static void main(String[] args)

{

int[] arr={1,34,23,22,27,2};

//select(arr,23);

//insert(arr,34);

Arrays.sort(arr);

binarySearch(arr,22);


}

//插入排序

public static void insert(int[] data,int num){

int left,right;

      int middle,j;

      for( int i = 1; i < data.length; i++ ) {

          // 准备

          left = 0;

          right = i-1;

          num = data[i];

          // 二分法查找插入位置

          while( right >= left ) {

              // 指向已排序好的中间位置

              middle = ( left + right ) / 2;

              if( num < data[middle] ){

   right = middle-1;// 插入的元素在右区间

  }

              else{

   left = middle+1;  // 插入的元素在左区间

  }

  }

          // 后移排序码大于R[i]的记录

          for( j = i-1; j >= left; j-- ) {

              data[j+1] = data[j];

          }

          // 插入

          data[left] = num;

  }

for(int z=0;z<data.length;z++){

System.out.print(data[z]+",");

}

}

//查找在哪个位置

public static void select(int[] arr,int m){

 int lower=0;//记录第一个元素

 int temp=arr.length-1;

 int index=-1;

 while(lower<=temp){

  index = (lower+temp)/2;//记录中间元素,用两边之和除2.

  int currentValue=arr[index];

  if(currentValue==m){//如果得到的数与要查找的数相等则break退出;

break;

  }else if(currentValue<m){//如果得到的数要小于查找的数、就用下标加1;否则减一

lower=index+1;

  }else{

temp = index-1;

  }

 }

 if(lower<=temp){

  System.out.println(m+"在数组中第:"+(index+1)+"位");

 }else{

  System.out.println("里面没有这个元素");

 }

}

//折半查找算法(前提是数据已经排好序)

public static void binarySearch(int[]a ,int num){  

       if (a.length == 0) {  

          System.out.println("里面没有这个元素");

       }  

       int startPosition = 0;  

       int endPosition = a.length - 1;  

       int midPosition = (startPosition + endPosition)/2;  

       while (startPosition <= endPosition) {  

           if (a[midPosition] == num) {  

               System.out.println(num+"在数组中第:"+(midPosition+1)+"位");

break;

           }  

           if (a[midPosition] > num ) {  

               endPosition = midPosition - 1;  

           }  

           if (a[midPosition] < num ) {  

               startPosition = midPosition + 1 ;  

           }  

           midPosition = (startPosition + endPosition)/2;  

       }  


   }  

}


你可能感兴趣的:(java,算法,二分法,上机练习题)