zoukankan      html  css  js  c++  java
  • 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    
  • 相关阅读:
    程序向informix数据库插入text类型的中文乱码问题
    深入理解Java:注解(Annotation)基本概念
    ssm架构的理解
    队列的java实现
    栈的java实现
    LinkedList的实现原理
    ArrayList的实现
    快速排序
    数据结构之桶排序
    leetcode
  • 原文地址:https://www.cnblogs.com/ghostwu/p/9278008.html
Copyright © 2011-2022 走看看