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

  • 相关阅读:
    739. Daily Temperatures
    556. Next Greater Element III
    1078. Occurrences After Bigram
    1053. Previous Permutation With One Swap
    565. Array Nesting
    1052. Grumpy Bookstore Owner
    1051. Height Checker
    数据库入门及SQL基本语法
    ISCSI的概念
    配置一个IP SAN 存储服务器
  • 原文地址:https://www.cnblogs.com/xhz-dalalala/p/4618792.html
Copyright © 2011-2022 走看看