算法系列之--C++和java的冒泡算法及图解(原)
来源:互联网 发布:win10录歌软件 编辑:程序博客网 时间:2024/06/11 17:37
介绍
冒泡算法基本上是IT从业人员接触到的第一个算法,其原理就是依次对比相邻元素,大的放在后面,当全部 list遍历之后,该list的最大值就会被置换到list的最后,详细步骤如下: 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
特点
用于算法入门,实战中效率最差
效率
平均时间复杂度O(n^2) 最坏时间复杂度O(n^2) 最优时间复杂度O(n)
备注
原始版本的冒泡算法,即使最优情况下,时间复杂度也是O(n^2),那么如何可以达到O(n)呢? 需要满足以下两个条件: 1、当前序列是完全的有序序列 2、添加一个标志位(didSwap),在第一次遍历时如果发现是有序序列,则停止循环即可。 因此可以看出,这种O(n)的情况其实只是理想状态而已,并不具有实战性。
图解
源码
C源码
#include <stdio.h>#define SIZE 8void bubble_sort(int a[], int n);void bubble_sort(int a[], int n){ int i, j, temp; for (j = 0; j < n - 1; j++) for (i = 0; i < n - 1 - j; i++) { if(a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } }}int main(){ int number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12}; int i; bubble_sort(number, SIZE); for (i = 0; i < SIZE; i++) { printf("%d", number[i]); } printf("\n");}
java源码
private int ARRAY_COUNT = 100000;/** 获取随机数列*/private List<Integer> getSortList() { List<Integer> sortList = new ArrayList<>(ARRAY_COUNT); Random ra = new Random(); for (int i = 0;i < ARRAY_COUNT;i++){ sortList.add(ra.nextInt(ARRAY_COUNT*10)); } return sortList; }/* * 交换数列元素 */ private void swapByIndex(List<Integer> list, int x, int y) { int temp = list.get(x); list.set(x,list.get(y)); list.set(y,temp); }/* * 冒泡算法 */ public void maoPao(List<Integer> list) { int temp = 0; for (int i = list.size() - 1; i > 0; --i) { for (int j = 0; j < i; ++j) { if (list.get(j) > list.get(j+1)) { temp = list.get(j); list.set(j,list.get(j + 1)); list.set(j+1,temp); } } } }
下一节我们来学习另外一种入门的排序算法—-选择算法
各个算法的java版本性能测试结果请看
阅读全文
0 0
- 算法系列之--C++和java的冒泡算法及图解(原)
- 算法系列之--Javascript和Kotlin的冒泡算法(原)
- 算法系列简单研究及图解(原)
- 算法系列之--Kotlin的算法实战比较(原)
- 算法系列之--Javascript和Kotlin的选择算法(原)
- 算法系列之--Javascript和Kotlin的插入算法(原)
- 算法系列之--Javascript和Kotlin的希尔排序算法(原)
- 算法系列之--Javascript和Kotlin的堆排序算法(原)
- 算法系列之--Javascript和Kotlin的基数排序算法(原)
- 算法系列之--Javascript和Kotlin的快速排序算法(原)
- 图解排序算法及C语言实现之 ------ 冒泡排序:Bubble Sort
- 数据结构算法之排序系列Java、C源码实现(5)--冒泡排序
- Java算法之冒泡排序算法及算法思想
- 排序算法系列--冒泡泡泡(C++)
- java算法之冒泡
- 算法学习笔记之图解冒泡法
- 冒泡算法之C++和Java实现
- java 算法之水桶 和冒泡
- Android SDK AndroidStudio 国内可用的镜像/代理地址
- 英语等级分数对应表
- Lombok插件
- SQLite操作
- 用MySQL解决HUE登录忘记账号、密码
- 算法系列之--C++和java的冒泡算法及图解(原)
- Django-restframework01 REST框架原始写法,与表单Form类似,实例
- Jzoj5461【NOIP2017提高A组冲刺11.8】购物
- 在 Azure 上通过 Powershell 创建多 Interface 的 Cisco CSR 路由器
- Spring Boot 整合 Mybatis 实现 Druid 多数据源详解
- windows安装 jenkins
- 学习笔记
- 射线 鼠标控制物体前进
- RecyclerView API译文