简单排序算法:冒泡排序(交换排序)
来源:互联网 发布:抽奖算法 奖池 c 编辑:程序博客网 时间:2024/06/08 18:39
冒泡排序:是一种交换排序。
基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
在不断循环的过程中,不仅将最小的关键字放到第一的位置,还将较小的关键字的位置提升了,较小的数字如同气泡般浮到上面。
import java.util.Arrays;public class Solution { public static void main(String[] args) { Solution s = new Solution(); int[] arr = {4,5,1,6,2,7,3,8,8,4}; s.BubbleSort(arr); System.out.println(Arrays.toString(arr)); //输出:[1, 2, 3, 4, 4, 5, 6, 7, 8, 8] } private void BubbleSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = arr.length - 2; j >= i; j--) { if (arr[j] > arr[j + 1]) swap(arr, j, j + 1); } } } private void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }}
冒泡算法的改进:
增加一个标记变量flag,如果有数据交换,则flag为true。没有任何数据交换的情况下说明序列已经有序,不需要再继续后面的循环判断工作。
import java.util.Arrays;public class Solution { public static void main(String[] args) { Solution s = new Solution(); int[] arr = {4,5,1,6,2,7,3,8,8,4}; s.BubbleSort(arr); System.out.println(Arrays.toString(arr)); //输出:[1, 2, 3, 4, 4, 5, 6, 7, 8, 8] } private void BubbleSort(int[] arr) { boolean flag = true; for (int i = 0; i < arr.length - 1 && flag; i++) { flag = false; for (int j = arr.length - 2; j >= i; j--) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); flag = true; } } } } private void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }}
冒泡排序复杂度分析:
最好的情况下,排序的表本身是有序的,对改进后的冒泡排序,n-1次比较,没有数据交换,时间复杂度为O(n)。
最坏的情况下,排序的表是逆序的,需要比较1 + 2 + ... + (n-1) = n(n-1)/2次,并作等数量级的记录移动。时间复杂度为O(n^2)。
阅读全文
0 0
- 简单排序算法:冒泡排序(交换排序)
- 排序算法----交换排序(冒泡排序,快速排序)
- 算法排序-交换排序(冒泡排序,快速排序)
- 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
- 排序算法-交换排序_冒泡排序
- 算法分析-交换排序(冒泡排序 & 快速排序)
- 排序算法_C++(四)交换排序之冒泡排序
- 算法-排序-交换排序(冒泡和快速排序)
- Java排序算法(六)--冒泡排序(交换排序)
- 经典算法之交换排序(冒泡排序、快速排序)
- 【排序算法】冒泡排序 bubble sort(交换类排序)
- 交换排序(冒泡排序)
- 交换排序(冒泡排序、快速排序)
- 排序5:交换排序(冒泡排序)
- 交换排序(冒泡排序、快速排序)
- 交换排序(快速排序 冒泡排序)
- 交换排序(冒泡排序--快速排序)
- 简单排序(冒泡,选择,交换,插入)
- C/C++
- 网络通讯TCP和UDP的编程流程
- AGC 011
- 99乘法表
- Libcurl 表单提交模式(POST 模式)
- 简单排序算法:冒泡排序(交换排序)
- 计算机视觉识别简史:从 AlexNet、ResNet 到 Mask RCNN
- Cordova插件(语音识别--科大讯飞)
- 商业web 漏洞扫描神器———AWVS篇基础
- mysql启动命令
- 使用socket封装库-waisock编程入门
- AS connection is not connect
- ImageView铺满整个组件
- 2.Mac下常用软件的安装