• java算法-冒泡排序


    冒泡排序的特点:

    >相邻位置比较,如果约定从大到小排序,每一轮比较完成,可以排好一个小的,如果从小到大,每一轮比较完成,可以在末尾排好一个大的

    我们用随机数组进行比较,把每轮的结果打印出来,就知道,冒泡排序的规律了:

    package com.ghostwu;
    import java.util.Random;
    
    class MyBubbleSort {
        private int[] arr;
        public MyBubbleSort(){
            arr = new int[10];
            Random rand = new Random();
            for( int i = 0; i < arr.length; i++ ){
                arr[i] = rand.nextInt( 101 );
            }
        }
        public void sort(){
            for( int i = 0; i < arr.length; i++ ){
                for( int j = 0; j < ( arr.length - i - 1 ); j++ ){
                    if( arr[j] > arr[j+1] ) {
                        int tmp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = tmp;
                    }
                }
                display( "第" + ( i + 1 ) + "轮的比较结果: " );
            }
        }
        public void display( String info ){
            System.out.println( info );
            for( int i = 0; i < arr.length; i++ ){
                System.out.print( arr[i] + "	" );
            }
            System.out.println();
        }
    }
    
    public class BubbleSort{
        public static void main( String[] args ){
    
            MyBubbleSort bs = new MyBubbleSort();
            bs.display( "排序之前:" );
            bs.sort();
            bs.display( "排序之后:" );
        }
    }

    执行结果:

    ghostwu@dev:~/java/data_struct/sort$ !javac
    javac -d . BubbleSort.java 
    ghostwu@dev:~/java/data_struct/sort$ java com.ghostwu.BubbleSort 
    排序之前:
    27    93    9    25    6    98    39    84    56    19    
    第1轮的比较结果: 
    27    9    25    6    93    39    84    56    19    98    
    第2轮的比较结果: 
    9    25    6    27    39    84    56    19    93    98    
    第3轮的比较结果: 
    9    6    25    27    39    56    19    84    93    98    
    第4轮的比较结果: 
    6    9    25    27    39    19    56    84    93    98    
    第5轮的比较结果: 
    6    9    25    27    19    39    56    84    93    98    
    第6轮的比较结果: 
    6    9    25    19    27    39    56    84    93    98    
    第7轮的比较结果: 
    6    9    19    25    27    39    56    84    93    98    
    第8轮的比较结果: 
    6    9    19    25    27    39    56    84    93    98    
    第9轮的比较结果: 
    6    9    19    25    27    39    56    84    93    98    
    第10轮的比较结果: 
    6    9    19    25    27    39    56    84    93    98    
    排序之后:
    6    9    19    25    27    39    56    84    93    98

    从上面的结果,可以看出,第7轮已经排好序了。后面的3轮完全没有必要,浪费CPU的计算时间,所以,我们可以完善一下上面的程序,用一个变量来标记,是否已经排好序了。

    改进后的程序:

    package com.ghostwu;
    import java.util.Random;
    
    class MyBubbleSort {
        private int[] arr;
        public MyBubbleSort(){
            arr = new int[10];
            Random rand = new Random();
            for( int i = 0; i < arr.length; i++ ){
                arr[i] = rand.nextInt( 101 );
            }
        }
        public void sort(){
            boolean flag = true;
            for( int i = 0; i < arr.length; i++ ){
                flag = true;
                for( int j = 0; j < ( arr.length - i - 1 ); j++ ){
                    if( arr[j] > arr[j+1] ) {
                        int tmp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = tmp;
                        flag = false;
                    }
                }
                if( flag ) break;
                display( "第" + ( i + 1 ) + "轮的比较结果: " );
            }
        }
        public void display( String info ){
            System.out.println( info );
            for( int i = 0; i < arr.length; i++ ){
                System.out.print( arr[i] + "	" );
            }
            System.out.println();
        }
    }
    
    public class BubbleSort{
        public static void main( String[] args ){
    
            MyBubbleSort bs = new MyBubbleSort();
            bs.display( "排序之前:" );
            bs.sort();
            bs.display( "排序之后:" );
        }
    }

    执行结果:

    ghostwu@dev:~/java/data_struct/sort$ java com.ghostwu.BubbleSort 
    排序之前:
    9    71    79    0    31    11    75    65    68    36    
    第1轮的比较结果: 
    9    71    0    31    11    75    65    68    36    79    
    第2轮的比较结果: 
    9    0    31    11    71    65    68    36    75    79    
    第3轮的比较结果: 
    0    9    11    31    65    68    36    71    75    79    
    第4轮的比较结果: 
    0    9    11    31    65    36    68    71    75    79    
    第5轮的比较结果: 
    0    9    11    31    36    65    68    71    75    79    
    排序之后:
    0    9    11    31    36    65    68    71    75    79    
  • 相关阅读:
    MATLAB新手教程
    关于Core Location-ios定位
    《TCP/IP具体解释卷2:实现》笔记--IP的分片和重装
    利用JasperReport+iReport进行Web报表开发
    Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系
    Openfire开发配置,Openfire源码配置,OpenFire二次开发配置
    在Activity中为什么要用managedQuery()
    24点经典算法
    linux概念之时间与时区
    java实现第五届蓝桥杯大衍数列
  • 原文地址:https://www.cnblogs.com/ghostwu/p/9278008.html
Copyright © 2020-2023  润新知