冒泡排序

八大排序――冒泡排序的优化算法及性能分析(C语言)

匿名 (未验证) 提交于 2019-12-03 00:19:01
冒泡排序(Bubble Sort) 1、冒泡排序的思想: 它重复地走访需要排序的数列,按照已经规定好的排序顺序,每一次比较相邻两个元素,如果他们的顺序错误就把他们交换过来。 直到没有再需要交换的元素,该数列就排序完成。 2、冒泡排序的算法运作(由小到大的排列顺序): 有一个数组a[10],用变量i表示它的下标(i从0开始)―― 比较两个相邻元素a[i]和a[i+1],如果a[i]>a[i+1],就交换这两个数的位置; 重复执行第一步,直到比较到最后一对的时候(例:首次是a[8]和a[9],此 时,a[9]的值为该数组的最大值,这个值属于有序数列); 对所有元素(除了有序数列里的元素),重复执行第一步和第二步,每执行完一次,都会找到当前比较的数里最大的那个(有序数列就会增加一个); 随着参与比较的元素越来越少,最终没有任何一对元素需要比较的时候,排序完成。 3、传统的冒泡排序图示: 传统的冒泡排序的代码: int a[8]={3,2,5,8,4,7,6,9}; for(int i=0;i<8;i++) //外层循环:要比较的次数; { for(int j=0;j<7-i;j++) 内层循环:每次比较时,要比较的元素的范围;(这里就相当于j<n-i-1 ) { if(a[j]>a[j+1])交换的三条语句 { int temp=a[j]; a[j]=a[j+1]; a[j+1]

C++冒泡排序及优化

匿名 (未验证) 提交于 2019-12-03 00:09:02
冒泡排序 1、经典冒泡排序 经典的冒泡排序为从左边开始依次判断排序,每次最终仅将一个数向后冒泡,而对于其他数的排序没有什么帮助;如果已经所有元素已经是有序的,依然执行循环。 2、优化冒泡排序 优化地方:(1)从后往前循环,若前者大于后者,则交换数据,这样能够使其他的数往前排。       (2)设置标志数,如果所有元素已经是有序的了,可以避免执行不必要的循环。 结果 优化地方: 来源:博客园 作者: 快牵着我的袜子 链接:https://www.cnblogs.com/socks/p/11556172.html

学号20182335 2019-2020-1 《数据结构与面向对象程序设计》实验六报告

馋奶兔 提交于 2019-12-03 00:08:45
课程:《程序设计与数据结构》 班级: 1823 姓名: 李金泉 学号:20182335 实验教师:王志强 实验日期:2019年10月日 必修/选修: 必修 1.实验内容 1.链表练习,要求实现下列功能: 通过键盘输入一些整数,建立一个链表; 这些数是你学号中依次取出的两位数。 再加上今天的时间。 例如你的学号是 20172301 今天时间是 2018/10/1, 16:23:49秒 数字就是 20, 17,23,1, 20, 18,10,1,16,23,49 打印所有链表元素, 并输出元素的总数。 在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是 int nZhangSan = 0; //初始化为 0. 做完这一步,把你的程序签入源代码控制(git push)。 2.链表练习,要求实现下列功能: 实现节点插入、删除、输出操作; 继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器; 从磁盘读取一个文件, 这个文件有两个数字。 从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。 从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。 从链表中删除刚才的数字1.

C# 冒泡排序

痞子三分冷 提交于 2019-12-03 00:07:37
一.定义 冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的排序进行排列。 注意:冒泡排序考数组和for理解,主要面试用; 二.分析 int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9 第一趟比较:8 7 6 5 4 3 2 1 0 9 交换了9次 i=0 j=nums.Length-1-i 第二趟比较:7 6 5 4 3 2 1 0 8 9 交换了8次 i=1 j=nums.Length-1-i 第三趟比较:6 5 4 3 2 1 0 7 8 9 交换了7次 i=2 j=nums.Length-1-i 第四趟比较:5 4 3 2 1 0 6 7 8 9 交换了6次 i=3 j=nums.Length-1-i 第五趟比较:4 3 2 1 0 5 6 7 8 9 交换了5次 第六趟比较:3 2 1 0 4 5 6 7 8 9 交换了4次 第七趟比较:2 1 0 3 4 5 6 7 8 9 交换了3次 第八趟比较:1 0 2 3 4 5 6 7 8 9 交换了2次 第九趟比较:0 1 2 3 4 5 6 7 8 9 交换了1次 三.实例 1. 对数组进行一个从小到大排序 int[] nums = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; for (int i = 0; i < nums

东方国信 面试

匿名 (未验证) 提交于 2019-12-03 00:05:01
单例是安全的么 选择排序 冒泡排序 冒泡排序时间复杂度 如果传一个已经排序的数据给冒泡排序 会造成资源浪费 如何解决这个问题 HashMap怎么遍历 HashMap长度能不能不为2^n HashMap怎么扩容 是否用过迭代器 C3P0需要配置哪些 线程的通信(等待和唤醒) 来源:51CTO 作者: Cowbell 链接:https://blog.csdn.net/Cowbell/article/details/100822720

《算法》第四版2.1.14

匿名 (未验证) 提交于 2019-12-03 00:03:02
这道题的意思是给一摞纸牌,上面标有大小的数字,让你在一定条件限制下完成排序,条件是你只能看到上面两张牌,要么交换两张牌,要么将最上面的牌放到这摞牌的底部。 从这道题的描述可以发现,纸牌的交换类似于冒泡排序。 先复习一下什么是冒泡排序。 冒泡排序通过重复地走访待排序列,发现相邻的两项顺序颠倒,就交换两项,不断循环重复,直到没有元素交换的时候(每次循环都能确定一个元素的固定位置,循环n次就能排序完成),循环终止完成排序。名字由来是因为在排序的过程中,越小的元素会经由交换慢慢地“浮”到顶端。 代码如下: void bubblesort ( int num []) { int n = 5 ; int i = 0 ; int swapped = 1 ; while ( swapped == 1 ){ swapped = 0 ; for ( i = 1 ; i < n ; i ++){ if ( num [ i - 1 ] > num [ i ]){ int temp = num [ i ]; num [ i ] = num [ i - 1 ]; num [ i - 1 ] = temp ; swapped = 1 ; } } } } 一般情况下,我们知道一共就循环n次,还可以这样写: void bubblesort ( int num []) { int n = 5 ; int i = 0

冒泡排序

匿名 (未验证) 提交于 2019-12-02 23:57:01
''' 冒泡算法的原理是经过每一轮的比较都能确定这一轮的最大数 所以到后面的比较次数都是依次少一 例如[3,4,9,1,5] 第一轮比较,比较4次 由于是有5个数,相邻的两个数两两比较,5个数需要比较4次,N个数,需要比较N-1次 3,4比较不用变 4,9比较不用变 9,1比较要交换位置 变成1,9 9,5比较需要交换位置,变成5,9 这样就完成了第一轮的比较,第一轮确定了列表的最大一位数为9,之后的比较就可以把9祛除了 再去比较其他的数就好了,应为既是是比较了,位置也是不会改变,浪费资源而已 经过第一轮的比较列表变成了[3,4,1,5,9],第二轮只需要比较三次 第二轮由于最后一个确定了,只需要比较三次就好了 3,4比较不用变 4,1比较需要交换,变成1,4 4,5比较,不用变, 由此我们确定了第二大的数是5 列表变成了[3,1,4,5,9] 第三轮比较,只需要比较两次 3,1比较需要交换,变成1,3 3,4比较不用改变, 列表变成了[1,3,4,5,9] 第四轮比较,只需要完成一次就行了 1,3比较不需要变化位置, 因此最终的列表为[1,3,4,5,9] ''' from random import randint l1 = [ randint(1,100) for _ in range(10)] print(l1) def dubbel_sort(arr): k = 0

lua 用递归方式实现冒泡排序

匿名 (未验证) 提交于 2019-12-02 23:45:01
1 --冒泡原理:比较相邻元素,如果第一个比第二个大,就交换他们两个。 2 3 tb={1,-1,0,89,45,-90.1,3} 4 i=1--循环次数 5 statrIndex=1 6 function changeData(k) 7 if tb[k]<tb[k+1] then 8 tb[k],tb[k+1]=tb[k+1],tb[k] 9 end 10 end 11 --递归实现冒泡函数 12 function recursion(k) 13 if k>#tb-i then--交换完成,执行下一次循环。循环次数i增加1,交换角标k重置为1 14 i=i+1 15 k=1 16 end 17 changeData(k)--交换元素函数 18 return i>=#tb or recursion(k+1)--对递归进行控制,添加结束条件。 i<#tb and recursion(k+1)这个写法也是可以的 19 end 20 recursion(statrIndex);--调用函数 21 print(table.concat( tb, ", ", 1, #tb))--打印排序完成的table TAG:记录点点滴滴,从简单做起。欢迎指点,请多批评。

冒泡排序的理解

匿名 (未验证) 提交于 2019-12-02 23:42:01
理解: 两两比较,交换后,得出的数组中的最大的数一次次的移动到数组的末尾,数组比较的次数也会一步步的少比较一个。数组a,两层循环。外层循环,保证比较次数为数组长度减1;内层循环,每次将数组比较a.length-i-1。 代码: public class BubbleSort{ public static void main(String[] args) { int a[] = {5, 9, 6, 2, 3}; for(int i = 0; i < 5; i++) { for(int j = 0; j < 5-i-1; j++) { if(a[j] > a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for(int i = 0; i < 5; i++) { System.out.print(a[i] + " "); } } } 文章来源: https://blog.csdn.net/weixin_44919928/article/details/91805281

c#中的冒泡排序和字符串Replace方法

匿名 (未验证) 提交于 2019-12-02 23:39:01
一.冒泡排序 口诀: N 个数字来排队,两两相比小靠前。 案例:定义一个数组,输出后从大到小排列 using System ; using System . Collections . Generic ; using System . Linq ; using System . Text ; using System . Threading . Tasks ; namespace _04 冒泡排序 { class Program { static void Main ( string [] args ) { //冒泡排序算法: //大的往上冒,小的往下沉 //对于一组数进行按照从大到小或从小到大的一个顺序排列算法 int [] array = { 23 , 30 , 18 , 40 , 21 }; //控制轮数 for ( int i = 0 ; i < array . Length - 1 ; i ++) { for ( int j = 0 ; j < array . Length - 1 - i ; j ++) { if ( array [ j ]< array [ j + 1 ]) { int temp = array [ j ]; array [ j ] = array [ j + 1 ]; array [ j + 1 ] = temp ; } } } for ( int