zoukankan      html  css  js  c++  java
  • 数据结构06-02-冒泡排序

    冒泡排序

    基本介绍

    • 冒泡排序的基本思想是:通过对待排序序列从前向后(从小标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。
    • 优化:因为排序过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后再进行)

    演示冒泡过程的例子(图解)

    小结:

    1. 一共进行数据的大小 -1 次大的循环。
    2. 每一趟排序的次数再逐渐减小。
    3. 如果我们发现在某趟排序中,没有发生过一次交换,可以提前结束冒泡排序。这个就是优化。

    冒泡排序应用实例

    
    package com.csh.sort;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * 测试80000个数排序花费时间13秒
     */
    public class BubbleSort {
        public static void main(String[] args) {
    //        int arr[] = {13, 12, 11, 9, 10};
            int arr[] = new int[80000];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = (int) (Math.random() * 8000000);
            }
            Date date1 = new Date();
            SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String date1Str = sdft.format(date1);
            System.out.println("排序前的时间为:" + date1Str);
    
            BubbleSort(arr);
    //        System.out.println(Arrays.toString(arr)); //打印时间太长
    
            Date date2 = new Date();
            String date2Str = sdft.format(date2);
            System.out.println("排序后的时间为:" + date2Str);
    
        }
    
        public static void BubbleSort(int arr[]) {
            int temp = 0;
            for (int i = 0; i < arr.length - 1; i++) {
                boolean flag = false; //标识变量,标识是否进行过交换
                for (int j = 0; j < arr.length - i - 1; j++) {
                    //前面数比后面大则交换
                    if (arr[j] > arr[j + 1]) {
                        flag = true;
                        temp = arr[j + 1];
                        arr[j + 1] = arr[j];
                        arr[j] = temp;
                    }
                }
    //            System.out.println("第" + (i + 1) + "次循环后数组结果为:" + Arrays.toString(arr));
                if (!flag) {
                    break;
                }else{
                    flag = false;
                }
    
            }
        }
    
    }
    
    
  • 相关阅读:
    算法训练 表达式计算
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    New ways to verify that Multipath TCP works through your network
    TCP的拥塞控制 (Tahoe Reno NewReno SACK)
    Multipath TCP Port for Android 4.1.2
    How to enable ping response in windows 7?
    NS3
    Multipath TCP Port for Android
  • 原文地址:https://www.cnblogs.com/steven-csh/p/14534593.html
Copyright © 2011-2022 走看看