基本介绍    时间复杂度O(n^2)

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

package com.diyo.sort;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date; /**
* BubbleSort冒泡排序 时间复杂度O(n^2)
*
* @author DengZY
*
*/
public class BubbleSort { public static void main(String[] args) { int arr[] = { 3, 9, -1, 10, -2 }; // 测试冒牌排序的速度O(n^2),给80000个数据测试
// int[] arr2 = new int[80000];
// for (int i = 0; i < 80000; i++) {
// arr2[i] = (int) (Math.random() * 999999); // 生成一个[0,999999)的数
// } // Date date1 = new Date();
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String date1Str = simpleDateFormat.format(date1);
// System.out.println("排序前的时间是="+date1Str); System.out.println("-----排序前-----");
System.out.println(Arrays.toString(arr)); System.out.println("-----开始排序-----");
bubbleSort(arr);
System.out.println("-----结束排序-----"); System.out.println("-----排序后-----");
System.out.println(Arrays.toString(arr)); // Date date2 = new Date();
// String date2Str =simpleDateFormat.format(date2);
// System.out.println("排序后的时间是="+date2Str); /*
* // 第一趟排序,将第一大的数排在倒数第一位
      for (int j = 0; j < arr.length - 1 - 0; j++) { //如果前面的数比后面的数大,则交换
        if (arr[j] > arr[j + 1]) {
          temp = arr[j];
          arr[j] = arr[j +1];
           arr[j + 1] = temp;
        }
      }
      System.out.println("第一趟排序后的数组");
System.out.println(Arrays.toString(arr));
*
* // 第二趟排序,将第二大的数排在倒数第二位 for (int j = 0; j < arr.length - 1 - 1; j++) { //
* 如果前面的数比后面的数大,则交换 if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j +
* 1]; arr[j + 1] = temp; } } System.out.println("第二趟排序后的数组");
* System.out.println(Arrays.toString(arr));
*
* // 第三趟排序,将第三大的数排在倒数第三位 for (int j = 0; j < arr.length - 1 - 2; j++) { //
* 如果前面的数比后面的数大,则交换 if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j +
* 1]; arr[j + 1] = temp; } } System.out.println("第三趟排序后的数组");
* System.out.println(Arrays.toString(arr));
*
* // 第四趟排序,将第四大的数排在倒数第四位 for (int j = 0; j < arr.length - 1 - 3; j++) { //
* 如果前面的数比后面的数大,则交换 if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j +
* 1]; arr[j + 1] = temp; } } System.out.println("第四趟排序后的数组");
* System.out.println(Arrays.toString(arr));
*/ } // 冒泡排序
public static void bubbleSort(int[] arr) {
int temp = 0; // 临时变量,用于交换
boolean flag = false; // 标识变量,表示是否进行过交换,用于减少重复排序次数
for (int i = 0; i < arr.length - 1; i++) {
// 第(i+1)趟排序,将最大的数排在最后
for (int j = 0; j < arr.length - 1 - i; j++) {
// 如果前面的数比后面的数大,则交换
if (arr[j] > arr[j + 1]) {
flag = true;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("第" + (i + 1) + "趟排序后的数组");
System.out.println(Arrays.toString(arr)); if (!flag) { // 在一趟排序过程中,一次交换都没有发生过
break;
} else {
flag = false; // 重置flag,进行下次判断
}
}
}

}

(1)一共进行  数组的大小 -1 次  大循环

(2)每一次排序的次数在逐渐的减少

(3)如果我们发现在某趟排序中,没有发生一次交换,可以提前结束排序。

冒泡排序(Bubble Sorting)的更多相关文章

  1. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...

  2. java排序算法之冒泡排序(Bubble Sort)

    java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...

  3. 排序算法--冒泡排序(Bubble Sort)_C#程序实现

    排序算法--冒泡排序(Bubble Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困 ...

  4. 【排序算法】冒泡排序(Bubble Sort)

    0. 说明 参考 维基百科中的冒泡排序 冒泡排序 (Bubble Sort) 是与插入排序拥有相等的执行时间,但是两种算法在需要的交换次数却很大地不同. 在最坏的情况,冒泡排序需要 O(n2)  次交 ...

  5. 冒泡排序(Bubble Sort),比较次数优化改进

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  6. 冒泡排序(Bubble Sort)

    常见的排序算法有Bubble Sort.Merge Sort.Quick Sort 等,所有排序算的基本法思想都是把一个无限大的数据规模通过算法一步步缩小,指导最后完成排序. 这里分享一下Buuble ...

  7. [算法] 冒泡排序 Bubble Sort

    冒泡排序(Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没 ...

  8. 算法之经典排序-冒泡排序(bubble sort)

    冒泡排序 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 这个算法的名字由来是因为越大的元 ...

  9. 经典排序算法 - 冒泡排序Bubble sort

    原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子 ...

随机推荐

  1. vue学习(十八)使用自定义指令 为字体渲染颜色

    <div id="app"> //v-color 是自定义的 <input type="text" class="form-cont ...

  2. MySQL(一)简介与入门

    一.数据库简介 这个博客详细介绍:http://www.cnblogs.com/progor/p/8729798.html 二.MySQL的安装 这个博客详细介绍:https://blog.csdn. ...

  3. Python网络编程基础|百度网盘免费下载|零基础入门学习资料

    百度网盘免费下载:Python网络编程基础|零基础学习资料 提取码:k7a1 目录: 第1部分 底层网络 第1章 客户/服务器网络介绍 第2章 网络客户端 第3章 网络服务器 第4章 域名系统 第5章 ...

  4. 想理解JVM看了这篇文章,就知道了!(一)

    前言 ​ 本章节属于Java进阶系列,前面关于设计模式讲解完了,有兴趣的童鞋可以翻看之前的博文,后面会讲解JVM的优化,整个系列会完整的讲解整个java体系与生态相关的中间件知识.本次将对jvm有更深 ...

  5. 【NeurlPS2019】Positional Normalization 位置归一化

    作者提出,当前的BatchNorm, GroupNorm, InstanceNorm在空间层面归一化信息,同时丢弃了统计值.作者认为这些统计信息中包含重要的信息,如果有效利用,可以提高GAN和分类网络 ...

  6. laravel开发调试工具laravel-debugbar的安装

    一.使用 Composer 安装该扩展包 composer require barryvdh/laravel-debugbar --dev 二.(可选)修改配置文件app/config.php Lar ...

  7. PHP zip_read() 函数

    定义和用法 zip_read() 函数读取打开的 zip 档案中的下一个文件.高佣联盟 www.cgewang.com 如果成功,该函数则返回包含 zip 档案中一个文件的资源.如果没有更多的项目可供 ...

  8. PHP mt_getrandmax() 函数

    实例 返回通过调用 mt_rand() 函数显示的随机数的最大可能值: <?phpecho(mt_getrandmax()); ?>高佣联盟 www.cgewang.com 定义和用法 m ...

  9. PHP str_ireplace() 函数

    实例 把字符串 "Hello world!" 中的字符 "WORLD"(不区分大小写)替换成 "Peter": <?php高佣联盟 w ...

  10. MediaStreamConstraints对象

    MediaStreamConstraints对象作用是在调用getUserMedia()时用于指定应在返回的MediaStream中包括哪些轨道,以及(可选)为这些轨道的设置约束. 属性 audio布 ...