选择排序算法伪代码2.2-2中的min←∞
(2011-04-07 20:56:32)
标签:
it |
分类: IT专业分享 |
以下是选择排序的伪代码以及一些分析:
SELECTION-SORT(A)
执行次数
1 for j
= 1 to
Length(A)
n
2 i
=
j
n
3
key =
A(i) n
4 for i
to
Lenth(A)
n(n+1)/2
5
if
key>A(i)
...
6
key =
A(i)
...
7
k =
i
...
8 A(k)
=
A(j)
...
9 A(j)
=
key
...
转载自“5年的救赎” 博客
------------------------------------------------------------
SELECTION-SORT(A)
for i←1 to n-1
do min←∞ for j←i to n //此处它定义min为无穷大有何作用呢?
这里主要是为了找到最小值,
就是找个最小值,找到比min小就交换
do if A[i]<min
then min←A[j]
←j minlabel
exchange A[i]↔A[minlabel]
[问题2] 循环不变式:
初始化:此时i=1,而子数组A[1..i]。亦即,它只包含一个元素A[1],显然是已排序的。
保持:在第二个for循环体中,即从A[i]到A[n]的数组元素中选出一个最小的,与第i个元素即A[i]互相交换相应的值,此时,因为假设已知A[1..i-1]已经排序好了,而新选出来的也同时大于A[i..i-1]中的任何一个数,这就是说A[1..i]也已排序。
终止:当i=n-1时,第二个for循环,从A[n-1]和A[n]中选出一个较小的与A[n-1]进行值交换。之后,所有的元素也就排序完了。
[问题3] 因为当i=n-1时,第二个for循环遍历的就只有A[n-1]和A[n]两个元素了,从中选出较小的那个数与A[i]值交换后被放到了最后第二位,而较大的那个数(同时也是全部元素中最大的),则自然排到了最后一位。显然已满足排序要求。
[问题4] 最佳和最坏情况下的运行时间都为Θ(n²)。因为这种直接选择排序,其关键字的比较次数与各元素原来的排列顺序无关。
转载自http://www.cnblogs.com/timebug/archive/2010/03/10/1682880.html