基本排序_冒泡排序_Java实现
来源:互联网 发布:网络接口都有哪些 编辑:程序博客网 时间:2024/04/26 20:43
转载请注明出处:http://blog.csdn.net/ljmingcom304/article/details/50341295
本文出自:【梁敬明的博客】
1.冒泡排序
冒泡排序就是重复的按照特定的顺序比较两两元素的大小,交换它们,直到最后没有可以交换的元素为止。
如上图所示,假设一个序列的初始状态为【9】【8】【7】【6】【5】,将序列由小到大进行排序,每次进行排序时从后往前依次比较两个数的大小,将较小的数前置。
第一次排序,找到最小的数为5,将其排在序列的第1位。
第二次排序,找到最小的数为6,将其排在序列的第2位。
第三次排序,找到最小的数为7,将其排在序列的第3位。
第四次排序,找到最小的数为8,将其排在序列的第4位。
只剩最后一个数,不用再次进行比较,直接位于序列最后。
2.示例代码
假设对一个长度为N的序列由小到大进行排序,第i次排序,需要找到最小的数为m,将其排在序列的第i位,当最终完成排序后需要进行N-1次排序。
当进行第i次排序时,需要从N与N-1开始从后往前两两元素进行比较,直到比较到第i位为止。
当元素间进行两两比较时,位置不在发生变换,说明此时序列为有序序列,可以直接结束循环。
public class BubbleSort { public static void main(String[] args) { int[] array = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; BubbleSort.sort(array); System.out.println("排序后数组:" + Arrays.toString(array)); } public static void sort(int[] a) { // 用于标志排序过程中元素是否发生交换 boolean flag = false; for (int i = 0; i < a.length - 1; i++) { // 从后向前遍历依次比较相邻两数大小,将较小的数进行前置 for (int j = a.length - 1; j > i; j--) { if (a[j - 1] > a[j]) { a[j] = a[j - 1] + a[j]; a[j - 1] = a[j] - a[j - 1]; a[j] = a[j] - a[j - 1]; flag = true; } } // 若某一轮没有发生交换,说明是有序数列,直接跳出循环 if (flag == false) break; System.out.println(Arrays.toString(a)); } }}
3.算法分析
时间复杂度:
若序列的初始状态处于正序,遍历一次,不需要交换元素间的位置,即可完成排序,所以比较次数和移动次数均为最小值。比较次数
若序列的初始状态为倒序,需要进行n-1次排序,每次排序都需要进行n-i次的比较,都需要移动记录三次来交换元素位置,所以比较次数和移动次数均为最大值。比较次数
因此,冒泡排序总的时间复杂度为
算法稳定性:
冒牌排序是比较相邻的两个元素,交换也发生在两个元素之间,若两个元素相等,不会发生交换,相同元素的顺序不会发生改变。因此,冒泡排序是一种稳定的排序算法。
0 0
- 基本排序_冒泡排序_Java实现
- 基本排序_选择排序_Java实现
- 基本排序_快速排序_Java实现
- 基本排序_希尔排序_Java实现
- 基本排序_归并排序_Java实现
- 基本排序_基数排序_Java实现
- 基本算法_堆排序_Java实现
- 基本算法_堆排序_Java实现
- 基本排序_直接插入排序_Java实现
- 冒泡排序_Java
- 排序_冒泡排序
- Java基本排序实现--插入排序,选择排序,冒泡排序
- 排序算法_冒泡排序
- 排序学习_冒泡排序
- 选择排序_冒泡排序
- 数据结构_冒泡排序
- 数据结构_冒泡排序
- 冒泡_排序
- 对象的深复制和浅复制
- 【Lua C交互】3 - lua调用C模块
- 函数调用过程栈帧变化详解
- 苹果App Store最新应用审核标准
- 如何在Myeclipse,Eclipse中输入一个字母或符号时出现提示各种方法和关键字
- 基本排序_冒泡排序_Java实现
- Java之多线程内存可见性_3(synchronized和volatile比较)
- python编程非常有用的网站
- 关于Python报错:SyntaxError: Non-ASCII character '\xe5' in file
- 应用界面主题Theme使用收集
- CAS实现SSO单点登录原理
- 数码管的消影
- Could not launch “XXXX” process launch failed: Security
- lnux 的信号