简单排序--选择、冒泡、插入
来源:互联网 发布:电子显微镜原理 知乎 编辑:程序博客网 时间:2024/05/17 05:06
写在前面
辛苦米老师,给我们连续周六日,给我们讲了很长一段时间的算法,突然发现自己之前是很抵触算法的,光想想我的脑细胞就会死掉很多,但是老师的方法很独特,感觉自己好像突然打开一扇门似的,学习也可以这样有趣。
快乐学习
这里给大家分享几个关于排序的有趣视频,至少本人还是很喜欢看的,欢乐多多的:
- 冒泡排序
http://v.youku.com/v_show/id_XMzMyOTAyMzQ0.html - 选择排序
http://v.youku.com/v_show/id_XMzMyODk5MDI0.html?f=16755664 - 快速排序
http://v.youku.com/v_show/id_XMzMyODk4NTQ4.html?f=16755664 - 插入排序
http://v.youku.com/v_show/id_XMzMyODk3NjI4.html?f=16755664
原来学习方法是很重要的,好的东西大家就要一起分享,如果可以快乐的学习,我们何必为难自己。
选择排序
思路
选择排序的思想注重于对象,就是先假设一个变量中的数是最大的。这里我们用到的是一个,一个空间。
我们让假设的这个变量中的数(此时数与变量是一个整体)跟给每一个要排序的数进行比较。试排序的要求而定,我们可以将变量中的值对调,这是仍使用这个变量中的数(这是变量还是原来的变量,但是数就可能已经对调了)与下个对象进行比较。
直到我们假设的这个变量和所有的数都比较一遍,这是我们假设的这个变量就是一个已经排好的数了,下一次循环排序我们就可以不用管他了。
图片
- 图片说明
该图片进行一次外循环,进行了一遍内循环,循环的结果就是将最小的数 1找出来,放在a1的变量里。这个排序的要求是从小到大排,我们先假设a1中的5是最大的,第一次内循环:a1中的5跟7比较,比7小不用换;第二次内循环:a1中的5跟9比,依然不用换;第三次内循环,a1中的5跟2比较,这是2比5小,将a1中的值和a4中的值交换。注意下一次内循环时,a1中的值就已经是2了,接着跟后边的数比较,步骤类似,此处省略。
代码
- 产生随机的10个数
Dim p As Stringdim a(10) as String Randomize '每进行一次事件,产生的一批随机数不同 p = "" '产生随机数了 For i = 1 To 10 Do x = Int(Rnd * 90) + 10 flag = 0 '做标志,假设没有重复的数,flag即为0 '如果产生随机数与之前的随机数相同,则次数不计入总数,重新 '再产生一个随机数 For j = 1 To i - 1 If a(j) = x Then flag = 1: Exit For Next j Loop While flag = 1 '当flag= 1 时重新再产生一个数 a(i) = x p = p & Str(a(i)) & "," Next i Label1.Caption = p
- 选择排序
Dim t As String '确定外循环的次数 For i = 1 To 9 '确定内循环的次数 For j = i + 1 To 10 If a(i) > a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next j Next i '显示 For i = 1 To 10 p = p & Str(a(i)) & "," Next i Label2.Caption = p
冒泡排序
思路
将相邻的两个数进行比较,按照排序的条件,将较大或较小的数冒泡。
外循环一次,内循环一遍,可以将一个数冒出来。
体会冒泡排序的过程性,对比选择排序的对象性。
图片
- 图片说明
该图进行的一次外循环,一遍内循环。按从大到小的顺序排列。首先让a1中的1和a2中的2比较,a1小,将a1和a2中的值对调。此时,a2中的1和a3中的3比较,a2小,将a2和a3中的值对调。一次类推,此时a6中的值变为1,相当于1冒泡出来了。
代码
Dim t As String '确定外循环的次数,要冒几个数 For i = 1 To 9 '确定内循环的次数 For j = 1 To 10 - i If a(j) < a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t End If Next j Next i '显示 For i = 1 To 10 p = p & Str(a(i)) & "," Next i Label2.Caption = p
插入排序
思路
插入排序是将一个数插入到一个有序的序列中,使得插完这个数后,这个数组仍是有序的。
插入排序算法的思想是把要排序的数分成两部分,第一部分,之前的原有数,和一个空位(不然没有空间的话,插入的这个数就没有地方了),第二部分,就是要插入的这个数。
将原有的数拍好序,最后将要插入的数,插入第一部分当中。
图片
- 图片说明
首先我们将要插入的数和原有数组的最后一个数比较,必要时再和数组内的数比较。图中是按从小到大的顺序排序的:- 第一次排序,将27插入到53,那27和53进行比较,有序序列为:27,53;
- 第二次排序,将36和53比较,36较小,于是将a2中的53向后移动一位,变为a3中的53,36继续和27比较,大于27,36就插在了a1中27的后面,a2里面。
- 依次类推,到第四次排序,将69插入前面的序列中,因为69大于53,所以直接将69插在a5的位置中,不用和之前的数去比较了。
代码
'插入排序,从小到大,向有序的数中插入数 '外循环的次数 9 次,每插入一个数记为一次 For i = 2 To 9 If a(i) < a(i - 1) Then '比较要插入的数和最后一个数 Min = a(i) For j = i - 1 To 1 Step -1 '内循环,插入数和内 '部的每一个数进行比较 If Min > a(j) Then Exit For '比不过 '小,就不用比了 '比得过小的时候,自然往后顺位 a(j + 1) = a(j) Next j a(j + 1) = Min '找到插入的数所在的位置 End If Next i For i = 1 To Val(Text1.Text) p = p & Str(a(i)) & "," Next i Label2.Caption = p
结束语
算法其实想清楚,感觉挺有意思的,尤其是那个视频,好像是激起我内心中的某种东西似的,感觉很有趣。对比这三种算法,插入算法执行起来要简要一些,没有像选择排序和冒泡排序那样重复去比较,省了很多事,继续努力吧。
9 0
- 简单排序--选择、冒泡、插入
- 冒泡,简单选择,插入排序
- 冒泡、选择、插入简单排序
- 简单排序-选择、插入、冒泡排序
- 简单排序---冒泡,简单选择,直接插入
- 简单排序(冒泡,选择,交换,插入)
- 简单排序(冒泡|选择|插入)
- 简单排序算法:冒泡、选择、插入
- 简单排序(冒泡、选择、插入)
- 简单排序——冒泡,选择,插入
- 直接插入、简单选择、冒泡排序
- 简单排序算法整理(冒泡,选择,插入)
- 简单排序(冒泡、选择、插入)总结
- 简单排序(冒泡,选择,直接插入)
- Java -- 简单排序(冒泡、选择、插入)
- 简单的排序--冒泡、选择、插入
- java冒泡、简单插入、选择排序
- JAVA数据结构:简单排序(冒泡,选择,插入)
- IO学习(十八)两个图总结常用javaIO流
- An internal error occurred during: "Launching FarmeWork on MyEclipse Tomcat". java.lang.NullPointerE
- 漫谈人机交互
- JAVA基础之等待/唤醒机制
- JAVA抽奖算法
- 简单排序--选择、冒泡、插入
- 笔试练习五
- eclipse集成aptana插件
- Java开发中的23种设计模式详解(转)
- 原码、反码和补码
- XOJ测试 2016.5.22
- JAVA基础之设计模式
- 自制模态框和关于z-index的知识
- HandlebarsJS 模板引擎