java学习第15天-数组冒泡排序,选择排序,二分查找(折半查找)-集合1

冒泡排序
原理 : 相邻两个元素比较 , 大的放后边 , 比较的趟数是元素个数减 1
package com.czz.Array;
 
public class ArraySort2 {
 
   public static void main(String[] args ) {
      int [] array = genArray ();
     System. out .println( " 排序前数组为 :" );
      printArray ( arr );
 
      long start = System. currentTimeMillis ();
      bubbleSort ( array );
      long end = System. currentTimeMillis ();
 
      System. out .println( " 排序后的数组 :" );
      printArray ( array );
 
      System. out .println( " 时间差为 :" + ( end - start ));
   }
 
   // 产生随机数组
   public static int [] genArray() {
      int [] arr = new int [1000];
      for ( int i = 0; i < arr . length ; i ++) {
         arr [ i ] = ( int ) (Math. random () * 1000 + 1);
      }
      return arr ;
   }
 
   // 冒泡排序
   public static void bubbleSort( int [] arr ) {
      // 控制比较的轮数 : 固定值 : 元素个数 -1
      for ( int i = 0; i < arr . length - 1; i ++) {
         // 内层循环控制的是两两比较的次数
         for ( int j = 0; j < arr . length - 1 - i ; j ++) {
            // 判断两个元素的大小
            if ( arr [ j ] > arr [ j + 1]) {
                int tmp = arr [ j ];
                arr [ j ] = arr [ j + 1];
                arr [ j + 1] = tmp ;
            }
         }
      }
   }
 
   // 生成数组
   public static int [] genArray() {
      int [] arr = new int [10];
 
      for ( int i = 0; i < arr . length ; i ++) {
         int r = ( int ) (Math. random () * 10 + 1);
         while ( isExist ( arr , r )) {
            r = ( int ) (Math. random () * 10 + 1);
         }
         arr [ i ] = r ;
      }
      return arr ;
   }
 
   // 判断元素是否重复
   public static boolean isExist( int [] arr , int value ) {
      for ( int i = 0; i < arr . length ; i ++) {
         if ( arr [ i ] == value ) {
            return true ;
         }
      }
      return false ;
   }
 
选择排序
package com.czz.test01;
 
 
public class CompareDemo {
 
   public static void main(String[] args ) {
      int [] arr = genArray ();
 
      System. out .println( " 排序前数组为 :" );
      printArray ( arr );
 
      selectSort ( arr );
      System. out .println( " 排序后数组为 :" );
      printArray ( arr );
   }
 
   // 方法一 选择排序
/* public static int [] BubbleSort( int [] arr ) {
      for ( int i = 0; i < arr.length - 1; i++) {
         for ( int j = i+1; j < arr.length ; j++) {
            if ( arr [i] > arr [j]) {
                int tmp = arr [i];
                arr [i]= arr [j];
                arr [j] = tmp ;
            }
         }
      }
      return arr ;
   }*/
  
   // 方法二
   public static int [] selectSort( int [] arr ) {
     
      for ( int i = 0; i < arr . length - 1; i ++) {
         int index = i ;
         int value = arr [ index ];
        
         for ( int j = i + 1; j < arr . length ; j ++) {
            if ( arr [ j ] < value ) {
                index = j ;
                value = arr [ j ];
            }
         }
        
         // 判断是否有必要交换两个元素
         if ( index != i ) {
            int tmp = arr [ i ];
            arr [ i ] = arr [ index ];
               arr [ index ] = tmp ;
         }
      }
     
      return arr ;
   }
 
   // 打印数组
   public static void printArray( int [] arr ) {
      for ( int i = 0; i < arr . length ; i ++) {
         System. out .print( arr [ i ] + " " );
      }
      System. out .println();
   }
 
   // 生成数组
   public static int [] genArray() {
      int [] arr = new int [10];
 
      for ( int i = 0; i < arr . length ; i ++) {
         int r = ( int ) (Math. random () * 20 + 1);
         while ( isExist ( arr , r )) {
            r = ( int ) (Math. random () * 10 + 1);
         }
         arr [ i ] = r ;
      }
      return arr ;
   }
 
   // 判断元素是否重复
   public static boolean isExist( int [] arr , int value ) {
      for ( int i = 0; i < arr . length ; i ++) {
         if ( arr [ i ] == value ) {
            return true ;
         }
      }
      return false ;
   }
}
 

选择排序比较两种方法的循环比较次数
package com.czz.Array;
 
/*
 * 优化后的选择排序交换元素的次数
 */
public class SelectSort2 {
   public static void main(String[] args ) {
      int [] arr1 = getArray ();
      System. out .println( " 排序前 :" );
      print ( arr1 );
     
      int [] arr2 = copy ( arr1 );
      System. out .println( " 排序前 :" );
      print ( arr2 );
     
      System. out .println( "-----------" );
      selectSort ( arr1 );
      System. out .println( " 排序后 :" );
      print ( arr1 );
     
      System. out .println( "-----------" );
      selectSort2 ( arr2 );
      System. out .println( " 排序后 :" );
      print ( arr2 );
    }
  
   // 产生一个 1000 个元素的数组
   public static int [] getArray(){
      int [] arr = new int [1000];
      for ( int i = 0; i < arr . length ; i ++){
         arr [ i ] = ( int )(Math. random ()*1000);
      }
      return arr ;
   }
  
   // 数组拷贝
   public static int [] copy( int [] src ){
      int [] dest = new int [ src . length ];
      // 使用系统类的数组拷贝方法
      System. arraycopy ( src , 0, dest , 0, src . length );

猜你喜欢

转载自blog.csdn.net/czz1141979570/article/details/80027127