zoukankan      html  css  js  c++  java
  • 排序算法之冒泡排序

    冒泡算法是最常见的排序算法之一,算法的思路也比较简单,也比较容易实现。对于一组n个数据的记录,最坏的情况需要n-1趟比较。

    第一趟:依次比较索引为0和1、1和2、2和3...n-2和n-1的元素,如果前者大于后者则交换这两个数据,所以经过第一趟,最大的元素排到了最后;而第二趟就不用管最后一个数据了,只需要再遍历前面的n-1个数据,以此类推。

    例如,19,45,16,21*,23,21,30

    第一趟的结果:19,16,21*,23,21,30,45

    冒泡算法是稳定的。以下是具体的实现:

    package test.java.sort.Util;
    
    /**
     * 定义一个数据包装类
     * @author tom
     */
    public class DataWrap implements Comparable<DataWrap> {
        int data;
        String flag;
    
        public DataWrap(int data, String flag) {
            this.data = data;
            this.flag = flag;
        }
    
        @Override
        public String toString() {
            return data + flag;
        }
    
        // 如果当前data大于dw,返回1;小于和等于返回数值不是1
        @Override
        public int compareTo(DataWrap dw) {
            return this.data > dw.data ? 1 : (this.data == dw.data ? 0 : -1);
        }
    }
    package test.java.sort.bubble;
    
    import test.java.sort.Util.DataWrap;
    
    /**
     *  Java实现冒泡算法
     * @author tom
     */
    public class BubbleDemo {
    
        public static void bubbleSort(DataWrap[] data) {
            System.out.println("开始排序");
            int arrayLength = data.length;
            for (int i = 0; i < arrayLength; i++) {
                for (int j = 0; j < arrayLength - i - 1; j++) {
                    if (data[j].compareTo(data[j + 1]) > 0) {
                        DataWrap temp = data[j];
                        data[j] = data[j + 1];
                        data[j + 1] = temp;
                    }
                }
                System.out.println(java.util.Arrays.toString(data));
            }
        }
    
        public static void main(String[] args) {
            DataWrap[] data = { 
                    new DataWrap(19, ""), 
                    new DataWrap(45, ""), 
                    new DataWrap(16, ""), 
                    new DataWrap(21, "*"),
                    new DataWrap(23, ""), 
                    new DataWrap(21, ""),
                    new DataWrap(30, ""),};
            System.out.println("排序之前");
            System.out.println(java.util.Arrays.toString(data));
            bubbleSort(data);
            System.out.println("排序完成");
            System.out.println(java.util.Arrays.toString(data));
        }
    }

    程序输出结果:

    排序之前
    [19, 45, 16, 21*, 23, 21, 30]
    开始排序
    [19, 16, 21*, 23, 21, 30, 45]
    [16, 19, 21*, 21, 23, 30, 45]
    [16, 19, 21*, 21, 23, 30, 45]
    [16, 19, 21*, 21, 23, 30, 45]
    [16, 19, 21*, 21, 23, 30, 45]
    [16, 19, 21*, 21, 23, 30, 45]
    [16, 19, 21*, 21, 23, 30, 45]
    排序完成
    [16, 19, 21*, 21, 23, 30, 45]

  • 相关阅读:
    个人最终总结
    电梯调度的改进
    电梯调度程序
    读程序的修改
    对wordcount单词字母部分的修改
    wordcount
    读程序
    单元测试
    Microsoft Visual Studio 2013安装及试用
    附加题(二)——沈航软件工程期末附加作业
  • 原文地址:https://www.cnblogs.com/hello-daocaoren/p/6862147.html
Copyright © 2011-2022 走看看