zoukankan      html  css  js  c++  java
  • 真正的Java数据结构之冒泡排序算法

     今天之前上网搜Java冒泡排序算法,看到很多都是错误的,所以自己就根据书上实现了一下:

    /**
     * 测试冒泡排序
     * @author vincent
     *
     */
    public class Maopao{
        
        //main方法
        public static void main(String[] args) {
            
            //定义要排序的数组数据
            int[] data = { 1, 5, 3, 54, 61 };
            
            //排序前输出
            printArray(data);
            
            //进行排序
            int[] data1 = bubbleSort(data);
            
            //排序后输出
            printArray(data1);
        }
    
        
        
        /**
         * <h4>冒泡排序(降序)</h4>
         * 
         * @param array
         *            要进行排序的int数组
         */
        public static int[] bubbleSort(int[] array) {
    
            //定义临时变量,负责交换时的临时数据
            int temp;
            
            //这一层循环是指每次都进行重新的、从头的判断交换排序
            for (int i = 0 ; i < array.length; i++) {
                
                //这里for的条件【j < array.length - 1】这样做是为了防止下面的判断出现[数组越界异常]!
                for (int j = 0; j < array.length - 1; j++) {
                    
                    //如果数组元素的当前(从第一个开始)值小于后一个元素的值
                    if (array[j] > array[j + 1]) {
                        
                        //进行数据交换
                        temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                        
                    }
                    
                }
                
            }
            
            return array;
        }
    
    
        /**
         * 输出数组元素
         * @param obj 要输出的数组
         */
        public static void printArray(int[] array) {
            for (int i = 0; i < array.length; i++) {
                System.out.print(array[i] + "  ");
            }
            System.out.println();
        }
    
    
    }

    程序运行流程,

    未排序时:

    [1, 5, 3, 54, 61]

    第一次排序结果:

    [5, 3, 54, 61, 1]

    第二次排序结果:

    [5, 54, 61, 3, 1]

    第三次排序结果:

    [54 , 61, 5, 3, 1]

    第四次排序结果:

    [61, 54, 5, 3, 1]

    温馨提示!这样的遍历并不是最佳的方式,因为每次都从头开始到结尾排序。效率较低(虽然说冒泡本来就效率低),我们可以考虑一下,既然每次都把最小的数据(或者最大的数据)排到最后一个,那么我们完全可以这样做,里面的每次比较只比较除了后一位的前面数据,文字比较绕口,看图看代码:  

    图片如下:

     
    
    
    
    

    代码:

    /**
         * <h4>修改后的冒泡排序(降序)</h4>
         * 
         * @param array
         *            要进行排序的int数组
         */
        public static int[] bubbleSort(int[] array) {
            
            //定义临时变量,负责交换时的临时数据
            int temp;
            
            //这一层循环是指每次都进行重新的、从头的判断交换排序,但每次都比上一次少一次比较(最后两个不做比较)
            for (int i = array.length - 1 ; i > 0; i--) {
                
                //这里的for的条件[j < i],因为每执行上面的for一次,i都会减1,
                //所以不会进行与第一次排序后的数组的最后一个数据进行比较,
                //比如:当i=3时,j<3,所以下面的这个for只遍历三次,即前面四个数据的两两比较。
                for (int j = 0; j < i; j++) {
                    
                    //如果数组元素的当前(从第一个开始)值小于后一个元素的值
                    if (array[j] < array[j + 1]) {
                        
                        //进行数据交换
                        temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                        
                    }
                    
                }
                
            }
            return array;
        }

    特别说明:个人学习心得,望各位大神些批评指教!谢谢。

  • 相关阅读:
    Parallel Decision Tree
    基础知识整理
    方差分析——单因素方差分析
    方差分析(2)
    方差分析(1)
    统计编程的框架与R语言统计分析基础——摘(2)统计分析之线性回归
    统计编程的框架与R语言统计分析基础——摘(1)
    龙门镖局
    公开课可下载资源汇总
    tomcat jdk servlet websocket版本对应关系及websocket 1.1的实现
  • 原文地址:https://www.cnblogs.com/vincentExclusiveBlog/p/6682521.html
Copyright © 2011-2022 走看看