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

    冒泡排序

    写在前面:这里将气泡大(值较大)的上移。

     1 import java.util.Arrays;
     2 
     3 /**
     4  * 冒泡排序.算法描述:
     5  * 初始,a[0...n-1]为无序区,“垂直排列”;
     6  * 第一趟扫描,从无序区底部向上,两两比较相邻气泡,大气泡(较大值)上移;第一趟扫描结束,最大的气泡移到顶部(即有序区);
     7  * 重复扫描无序区a[0...n-2];
     8  * 总共进行n-1趟扫描得到有序区,或者若一趟扫描中未发生气泡位置的交换,说明已全部有序。
     9  * O(T) = n*(n+1)/2
    10  * @author yi
    11  * @date 2015年7月3日
    12  *
    13  * @me 1. while 很好用啊 while(len-1>0 && unSequenced) 2.跳出循环的条件 3.标志位的名字问题 4.方法外提,减少主函数体
    14  */
    15 public class BubbleSort {
    16     /**
    17      * 冒泡排序
    18      * 
    19      * @param arr
    20      */
    21     public static void bubblesort(int[] arr) {
    22         int len = arr.length;
    23         // 标志一次循环中是否进行了交换
    24         boolean unSequenced = true;
    25         // 每次循环都将最大值移到数组尾,下一次循环的元素数减1
    26         // 若上一次循环未交换任何元素,说明已有序
    27         while(len-1>0 && unSequenced) {
    28             unSequenced = false;
    29             // 两两比较相邻元素,较大值后移
    30             for(int j = 0; j < len-1; j++) {
    31                 if(arr[j] > arr[j+1]) {
    32                     swap(arr, j, j+1);
    33                     unSequenced = true;
    34                 }
    35             }
    36             len--;
    37             // 每次循环后打印排序结果
    38             System.out.println(Arrays.toString(arr));
    39         }
    40     }
    41     
    42     /**
    43      * 交换数组元素
    44      * 
    45      * @param arr
    46      * @param i
    47      * @param j
    48      */
    49     static void swap(int[] arr, int i, int j) {
    50         int tmp = arr[i];
    51         arr[i] = arr[j];
    52         arr[j] = tmp;
    53     }
    54     
    55     /**
    56      * 主函数,定义测试数据,调用冒泡排序方法
    57      * 
    58      * @param argus
    59      */
    60     public static void main(String[] argus) {
    61         // 测试例子
    62 //        int[] arr = {6, 2, 4, 1, 5, 9};           // 显示引入标志位后的优化效果
    63         int[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1};  // 显示冒泡排序:每次将最大值移到最后
    64         System.out.println(Arrays.toString(arr));
    65         BubbleSort.bubblesort(arr);
    66     }
    67 }
    View Code

    参考资料(这里也有演示动画):

    http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.3.1.1.htm

  • 相关阅读:
    [css]display: table-cell,用div做分列布局
    [css]《CSS知多少》
    关于安装Android Studio的一些问题的解决方法
    枚举
    揭开计算机的神秘面纱
    Android模拟器访问本地Web应用
    Android开发中常用的Eclipse快捷键
    详解Windows平台搭建Androiod开发环境
    Web 应用的安全性
    坚持才能成功------王健林
  • 原文地址:https://www.cnblogs.com/xhz-dalalala/p/4618792.html
Copyright © 2011-2022 走看看