• 冒泡排序


    冒泡排序应用了交换排序的基本思想:两两比较待排序记录,发现两个记录的次序相反则交换,直到没有反序的记录为止。

    冒泡排序算法的基本思想:

      把每个数据看成一个气泡,按初始顺序自底向上依次对两两气泡进行比较,对上重下轻的气泡交换顺序(这里用气泡轻、重表示数据大、小),保证轻的气泡总能浮在重的气泡上面,直到最轻的气泡浮到最上面;保持最后浮出的气泡不变,对余下气泡循环上述步骤,直到所有气泡从轻到重排列完毕。

      因为每一趟排序都使有序区增加了一个气泡,在经过n-1趟排序之后,有序区中就有n-1个气泡,而无序区中气泡的重量总是大于等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行n-1趟排序。

      优化:若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下,因此,冒泡排序过程可在此趟排序后终止。在下面给出的实现代码中,引入boolean标记isSwap,在每趟排序开始前,先将其置为false。若排序过程中发生了交换,则将其置为true。各趟排序结束时检查,若未曾发生过交换则终止算法,不再进行下一趟排序。

       时间复杂度:冒泡排序是一种用时间换空间的排序方法,最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序。在这种情况下,每一次比较都需要进行交换运算,对于n位的数组则有比较次数为 (n-1) + (n-2) + ... + 1 = n * (n - 1) / 2,这就得到了最大的比较次数,冒泡排序的最坏时间复杂度为O(n2)。若数组的初始状态是已经排好序的,一趟扫描即可完成排序。所需的关键字比较次数为n-1,冒泡排序最好的时间复杂度为O(n)

     1 package com.bingoogol.algorithm.sort;
     2 
     3 /**
     4  * 冒泡排序
     5  * 
     6  * @author bingoogol@sina.com
     7  */
     8 public class BubbleSort {
     9 
    10     public static void main(String[] args) {
    11         int[] arr = new int[] { 2, 6, 30, 25, 9, 18, 13 };
    12         System.out.print("排序前:");
    13         BubbleSort.printArr(arr);
    14         BubbleSort.sort(arr);
    15         System.out.print("排序后:");
    16         BubbleSort.printArr(arr);
    17     }
    18 
    19     public static void sort(int[] arr) {
    20         for (int i = 0; i < arr.length - 1; i++) {
    21             boolean isSwap = false;
    22             // 自下向上扫描
    23             for (int j = arr.length - 1; j > i; j--) {
    24                 if (arr[j] < arr[j - 1]) {
    25                     isSwap = true;
    26                     BubbleSort.swap(arr, j, j - 1);
    27                 }
    28             }
    29             if (!isSwap) {
    30                 return;
    31             }
    32         }
    33     }
    34 
    35     public static void swap(int[] data, int i, int j) {
    36         int temp = data[i];
    37         data[i] = data[j];
    38         data[j] = temp;
    39     }
    40 
    41     public static void printArr(int[] arr) {
    42         for (int i = 0; i < arr.length - 1; i++) {
    43             System.out.print(arr[i] + ",");
    44         }
    45         System.out.println(arr[arr.length - 1]);
    46     }
    47 }
    查看Java语言版代码
  • 相关阅读:
    java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.login_jsp
    安装eclipse插件,很慢终于找到了解决的方法
    开发辅助网站---programcreek
    java--遇到NoSuchMethodError通用解决思路
    详解SpringBoot 添加对JSP的支持(附常见坑点)
    springboot 配置jsp支持
    JS前端取得并解析后台服务器返回的JSON数据的方法
    ajax接收json数据到js解析
    1 problem was encountered while building the effective model [FATAL] Non-parseable POM F:MavenRepositoryorgapachemavenpluginsmaven-resources-plugin2.6maven-resources-plugin-2.6.pom: start tag
    新装mvn建第一个项目报错org.apache.maven.plugins:maven-resources-plugin:2.6
  • 原文地址:https://www.cnblogs.com/bingoogol/p/sort-bubble.html
Copyright © 2020-2023  润新知