冒泡排序
来源:互联网 发布:智能优化算法的优缺点 编辑:程序博客网 时间:2024/06/05 06:01
冒泡排序是一种用于对存储器中给出的N个元素进行排序的算法,例如:具有N个元素的数组。冒泡排序将逐个比较所有元素,并根据它们的值进行排序。
它被称为冒泡排序,是因为每次迭代,列表中最大的元素向上浮起来,就像一个水泡上升到水面。
通过遍历所有数据项进行排序,并比较相邻的数据项和交换出错的每对数据。
下面列出golang实现的冒泡排序法:
package sortfunc BubbleSort1(list []int) ([]int, int) { count := 0 for i := 0; i < len(list); i++ { for j := i + 1; j < len(list); j++ { count++ if list[i] > list[j] { list[i], list[j] = list[j], list[i] } } } return list, count}func BubbleSort2(list []int) ([]int, int) { count := 0 for i := 1; i < len(list); i++ { for j := 0; j < len(list)-i-1; j++ { count++ if list[j] > list[j+1] { list[j], list[j+1] = list[j+1], list[j] } } } return list, count}func BubbleSort3(list []int) ([]int, int) { count := 0 flag := true for i := 1; i < len(list) && flag; i++ { flag = false for j := 0; j < len(list)-i-1; j++ { count++ if list[j] > list[j+1] { list[j], list[j+1] = list[j+1], list[j] flag = true } } } return list, count}
sort git:(dev) go test -v bubble_sort_test.go bubble_sort.go=== RUN TestBubbleSort1--- PASS: TestBubbleSort1 (0.00s) bubble_sort_test.go:10: [5 10 20 21 33 56] 15=== RUN TestBubbleSort2--- PASS: TestBubbleSort2 (0.00s) bubble_sort_test.go:14: [5 10 20 21 33 56] 10=== RUN TestBubbleSort3--- PASS: TestBubbleSort3 (0.00s) bubble_sort_test.go:18: [5 10 20 21 33 56] 4PASSok command-line-arguments 0.006s
在冒泡排序中,n-1比较将在第一次进行,第二次进行n-2次,第三次进行n-3次,等等。所以比较的总数将是
(n-1)+(n-2)+(n-3)+.....+3+2+1Sum = n(n-1)/2i.e O(n2)
因此,冒泡排序的复杂度为O(n 2)。
冒泡排序的主要优点是算法的简单性。冒泡排序的空间复杂度为O(1),因为只需要单个额外的内存空间交互数字。
最佳时间复杂度将为O(n)。
算法的复杂性分析
最坏情况时间复杂度: O(n ^ 2)
最佳情况时间复杂度: O(n)
平均时间复杂度: O(n ^ 2)
空间复杂度: O(1)
阅读全文
0 0
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- java mock及Mockito实战
- 性能优化(1)
- iOS学习笔记-106.多线程05——CGD同步、异步函数和并行、串行、主队列示例
- Python 3.0 面向对象
- iOS 查找Mac电脑的地址
- 冒泡排序
- leetcode动态规划总结
- 灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断
- 计算机组成知识整理3:数的表示
- php基础学习day1
- jquery-easyui常用demo
- 面向对象编程的基本概述
- 餐饮软件之易石软件简介
- R语言:批量导入文件夹中的文件