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;  

       }  


   }  

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章