【前言】
算法是个成员众多的大家族,排序只是众多家族分支中的一个小分支,即便是个小分支,也有冒泡、选择、插入、计数、合并等等几十个兄弟姐妹,由此也可管窥一番算法家族的庞大。由于曾经的数学心理阴影,让我连带着认为“算法”家族肯定也是个对新人不甚友好的家族,以至于这次是我接触编程两年来第一次对算法家族的一次相对仔细的了解,原来“算法”并不像想象力那么难。
【正文】
一、选择排序:
1.工作原理:
它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
例如:54362
6 4352
65 342
654 32
65432
2.稳定性
选择排序是一种不稳定的排序算法,那么什么是稳定性呢?稳定性指:
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
概念总是严谨的让人厌倦。 那么来举个例子吧:
例如以选择排序法给 54358排序,挑最大的放第一位。
第一次判断后:84355 ,原本排在第一位的5一下跑到了排在第四位5的后边,等到最后完成排序,85543原来靠前的5则成了靠后的5,这就是不稳定排序。
3.时间复杂度
选择排序的交换操作介于 0 和 (n - 1) 次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。
4.程序代码(VB)
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
二、冒泡排序:
1.工作原理:
重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
a比较相邻的元素。如果第一个比第二个大,就交换他们两个。
b对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后 的元素应该会是最大的数。
c针对所有的元素重复以上的步骤,除了最后一个。
d持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2.稳定性
冒泡排序是一种稳定的排序方式。两个两个作比较,计算机也不会闲着没事把一样的两个元素掉个个。
3.时间复杂度: (这个目前自己也不理解不写了,链接一下)
4.程序(VB)
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
【总结】
一点一点慢慢来,总有学会的时候。
关于插入排序、希尔排序:http://blog.csdn.net/srk950606/article/details/51291940