基本介绍    时间复杂度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. git问题解决

    1.如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候, 在发布这个配置文件的时候,会发生代码冲突: error: Your local changes to the ...

  2. SQL语法入门

    SQL语句概述 ·SQL定义:是一种特定目的编程语言,用于管理关系数据库 ·GaussDB T是一种关系数据库,SQL语句包括 1.DDL 数据定义语言,用于定义或修改数据库中的对象(表,视图,序列, ...

  3. rsync 的用法

    rsync官方网站: https://www.samba.org/ftp/rsync/rsync.html rsync是可以实现增量备份的工具.配合任务计划,rsync能实现定时或间隔同步,配合ino ...

  4. OceanBase安装和使用

    链接 https://mp.weixin.qq.com/s?spm=a2c6h.12873639.0.0.41f92c9bH5FL2Y&__biz=MzU3OTc2MDQxNg==&m ...

  5. Spring Cache缓存注解

    目录 Spring Cache缓存注解 @Cacheable 键生成器 @CachePut @CacheEvict @Caching @CacheConfig Spring Cache缓存注解 本篇文 ...

  6. Web压测工具之Webbench和http_load

    Webbench简介 是知名的网站压力测试工具,能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况. webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每 ...

  7. 读/写docx文件

    安装 pip install python-docx 1.建立新Word文档 建立新文档需要调用Document对象的save方法,一个Document对象代表一个Word文档,该方法的参数是保存的文 ...

  8. Rsync服务详解

    Rsync简介 什么是rsync? Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.Rstync软件适用于unix/linux/windows等多种操作系 ...

  9. 如何验证 names(名称), e-mails(邮件), 和 URLs

    PHP 表单 - 验证邮件和URL 本章节我们将介绍如何验证 names(名称), e-mails(邮件), 和 URLs. PHP - 验证名称 以下代码将通过简单的方式来检测 name 字段是否包 ...

  10. PHP ftp_quit() 函数

    定义和用法 ftp_quit() 函数关闭 FTP 连接. 语法 ftp_quit(ftp_connection) 参数 描述 ftp_connection 必需.规定要关闭的 FTP 连接. 提示和 ...