冒泡排序

常见算法的时间空间复杂度【整理摘编】

。_饼干妹妹 提交于 2019-12-04 00:59:20
1.( 来源 ) (1)O(1):常量阶,运行时间为常量 (2)O(logn):对数阶,如 二分搜索算法,快速幂 (3)O(n):线性阶,如 n个数内找最大值 (4)O(nlogn):对数阶,如 快速排序算法,线段树 (5)O(n^2):平方阶,如 选择排序,冒泡排序 (6)O(n^3):立方阶,如 两个n阶矩阵的乘法运算 (7)O(2^n):指数阶,如 n个元素集合的所有子集的算法 (8)O(n!):阶乘阶,如 n个元素全部排列的算法 2.( 来源) 来源: https://www.cnblogs.com/phemiku/p/11826243.html

【算法】小规模排序

淺唱寂寞╮ 提交于 2019-12-03 18:16:22
在将排序之前,首先思考一个问题:选择排序、插入排序、冒泡排序的时间复杂度均为 o(n) ,为什么大家在讲排序的时候首先更愿意讲插入排序? 在分析一个排序算法好坏的时候,往往要考虑这么几个方面: 1.时间复杂度 考虑到时间复杂度的时候就要考虑到最好情况和最坏情况,尽可能多的有序当然是最好的情况,完全逆序则是最坏的情况,有序度不同,算法的性能也不同。 2.空间复杂度 算法的内存消耗可以通过空间复杂度来衡量。其中,原地排序算法,指的是空间复杂度 o(1)的算法。 3.排序算法的稳定性 稳定性指的是,如果待排序的序列中存在值相等的元素,经过排序以后,相等元素之间原有的先后顺序不变。 举个例子,如果现在我们要给电商交易系统的“订单”排序,订单有俩个属性,一个是下单时间,一个是订单金额。对于时间相同的订单,我们希望按照金额从小到大排序,对于金额相同的订单,我们希望按照下单时间从早到晚排序。那么我们可以按照俩个属性分别排一次续,如果是稳定的排序算法,假设第一次按时间排序,第二次按照金额排序,那么稳定算法可以保持金额相同的俩个对象,在排序后的前后顺序不变。 首先介绍一下三种排序算法: 冒泡排序 冒泡排序只会操作俩个相邻的数据,每次冒泡操作都会对相邻的俩个元素进行比较,如果不满足大小关系要求就让它俩互换。一次有效的冒泡至少会让一个元素移动到它应该在的位置,重复N次就完成了N个数据的排序工作。 实际上

冒泡排序

ⅰ亾dé卋堺 提交于 2019-12-03 17:17:41
遍历文件,如果邻近的两个元素的顺序不对,就将两者交换,重复这样的操作直到整个文件排好序。冒泡排序的执行速度比选择排序和插入排序都要慢。 1 template <class Item> 2 void compexch(Item &A, Item &B) 3 {if (B < A) exch(A, B)} 4 5 template <class Item> 6 void bubble(Item a[], int l, int r) 7 { 8 for (int i = l; i < r; i++) 9 for (int j = r; j > i; j--) 10 compexch(a[j-1], a[j]); 11 } 来源: https://www.cnblogs.com/ningjing213/p/11804489.html

冒泡排序

若如初见. 提交于 2019-12-03 13:58:14
实现思路: 使用双重for循环,内层变量为i, 外层为j,在内层循环中不断的比较相邻的两个值(i, i+1)的大小,如果i+1的值大于i的值,交换两者位置,每循环一次,外层的j增加1,等到j等于n-1的时候,结束循环 # 冒泡排序 def bubble(l): # 外层循环: 对应重复走访数据的次数 for i in range(len(l) - 1): # 内层循环: 对应每次走访数据时,相邻数据对比次数 for j in range(len(l) - i - 1): # 比较相邻数据 - 从小到大 if l[j] > l[j+1]: # 若前者大于后者,则交换 l[j], l[j+1] = l[j+1], l[j] print('重复走访数据次数:', i + 1) # 原始数据 - 学生身高 #values = [150,120,170,160,172,144,187,200,178,166] lst = [250, 300, 120, 144, 150, 160, 166, 170, 172, 178, 187, 200] print('原数据', lst) # 按照从小到打排序 bubble(lst) # 打印排序后结果 print('排序后', lst) 来源: https://www.cnblogs.com/lw1095950124/p/11798000.html

冒泡排序(可优化)

喜夏-厌秋 提交于 2019-12-03 11:53:50
一、基本介绍    冒泡排序(Bubble Sorting)的基本思想是:     通过对待排序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底的气泡一样逐渐向上冒。    优化:     因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序。因此要在排序过程中设置一个标志 flag 判断元素是否进行过交换,从而减少不必要的比较。 二、演示冒泡过程的例子(图解)        总结图解过程 :     (1)一共进行 数组的大小-1 次 大的循环     (2)每一趟排序的次数在 逐渐的减少     (3)如果发现在某趟排序中, 没有发生一次交换 ,可以提前结束冒泡排序,这就是优化。 三、冒泡排序应用实例   将五个无序的数:3,9,-1,10,-2 使用冒泡排序法将其排成一个从小到大的有序数列。    代码实现: 1 import java.text.SimpleDateFormat; 2 import java.util.Arrays; 3 import java.util.Date; 4 5 public class BubbleSort { 6 7 public static void main(String[] args) { 8 int arr[] = { 3, 9

20182326 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结

可紊 提交于 2019-12-03 11:46:10
目录 2019-2020-26 《数据结构与面向对象程序设计》第8周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管week13 上周考试错题总结 结对及互评 点评: 点评过的同学博客和代码 其他(感悟) 学习进度条 参考资料 2019-2020-26 《数据结构与面向对象程序设计》第8周学习总结 教材学习内容总结 链表 可用对象引用变量来创建链式结构 链表由对象组成,其中每个对象指向表中的下一个对象 链表根据需要动态变大,本质上没有容量限制 修改引用的词序对链表的维护很重要 处理链表中的第一个结点通常需要特殊处理 实现带哨兵结点或虚位结点作为第一个结点的表,可以去掉处理第一个结点这种特殊情形 保存在集合中的对象不能包含所用数据结构的任何实现细节 使用链表实现栈,有效实现了相关操作的集合的任何一种实现方案都能用来解决问题 栈的链式实现方案在链表的一端添加和删除元素 查找 查找是在一组项内找到指定目标或是确定目标不存在的过程 高效的查找使得比较的次数最少 Comparable接口允许多态实现算法,而不是只应用于特定的类 排序 二分查找利用了查找池有序的这个特性 二分查找每次比较都排除了一半的可行候选数据 排序是按某种标准将一列数据按确定的次序重排的过程 选择排序算法反复的将一个个具体的值放到它最终的有序位置,从而完成一组值的排序

排序算法-冒泡排序

旧时模样 提交于 2019-12-03 11:29:22
排序算法系列博客: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 计数排序 基数排序 九大排序排序是数据结构体系中最重要的内容之一,这一块必须要非常熟练的掌握,应该做到可以立马写出每个排序的代码,有多种实现方法的必须多种都能很快写出来,当然对各个排序的性能的了解也是基础且重要的。我们先对排序这一块进行一个整体的把握。 内排序:在对待排序数据存放在内存中进行的排序过程。是我们主要讨论与学习的重点。 外排序:待排数据量太大,无法一次性将所有待排序数据放入内存中,在排序过程中需要对磁盘等外部储存器进行访问。不是我们谈论与学习的重点,但也要通过相关资料或书籍了解其基本原理。 比较排序:排序过程中需要对数据关键字进行比较。 非比较排序:排序过程中不需要对数据关键字进行比较。 排序算法的稳定性:在每一次单趟排序后,相同关键字的相对顺序不变。(后面讲到了再具体解释) 所有讲解都以升序为例(降序完全就是改个符号的问题啦),本篇先讲几个简单的,复杂些的后面每个单独写。 冒泡排序 待排序数组: 42 ,13 ,15 ,28 ,23 ,17 ,14 冒泡相对算是最简单的排序了。思想就是:冒泡,就像水中的气泡,越往上泡泡约大,每一趟排序,都确定下来一个最大值,也就是冒出一个大泡泡。太多的解释不在赘述,网上都是。看下图: 解析冒泡排序过程: 1.第一趟排序 42和13比较,42

冒泡排序C++算法

别说谁变了你拦得住时间么 提交于 2019-12-03 11:04:34
冒泡排序算法C++ #include <iostream> using namespace std; template<typename T> //整数或浮点数皆可使用 void bubble_sort(T arr[], int len) { int i, j; T temp; for (i = 0; i < len - 1; i++) for (j = 0; j < len - 1 - i; j++) if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } int main() { int arr[] = { 61, 17, 29, 22, 34, 60, 72, 21, 50, 1, 62 }; int len = (int) sizeof(arr) / sizeof(*arr); bubble_sort(arr, len); for (int i = 0; i < len; i++) cout << arr[i] << ' '; cout << endl; float arrf[] = { 17.5, 19.1, 0.6, 1.9, 10.5, 12.4, 3.8, 19.7, 1.5, 25.4, 28.6, 4.4, 23.8, 5.4 }; len =

冒泡排序C

北城余情 提交于 2019-12-03 07:48:15
#include <stdio.h> int main() { int a[5] = {3, 5, 6, 7, 2}; int i, j, temp; for (i = 0; i < 4; i++) { for (j = i + 1; j < 5; j++) { if (a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } for (i = 0; i < 5; i++) { printf("%d", a[i]); } } 来源: https://www.cnblogs.com/zpchcbd/p/11783726.html

冒泡排序

限于喜欢 提交于 2019-12-03 07:42:25
原理大概很容易记住,易错的是: for(int i = 1 ;i<arr.length;i++)   for(int j =0; j<arr.length-i ;j++) 来源: https://www.cnblogs.com/sout-ch233/p/11783613.html