选择排序是:选出A中最小的与A[1]进行交换(假设是升序),再选择次小的与A[2]交换,对A进行n-1次这样的过程。
算法伪代码如下:
for i-> to 1 length[A]-1
do key<-a[i]
j<-i+1
n<-j
while j<= length[A]
if key>A[j]
do key=A[j]
n=j
do j<-j+1
A[n]<-A[i]
A[i]<-key
算法时间分析
运行时间 运行次数
for i-> to 1 length[A]-1 c1 n-1 do key<-a[i] c2 n-1 j<-i+1 c3 n-1 n<-i c4 n-1 while j<= length[A] c5 sum(ti) if key>A[j] c6 sum(ti-1) do key=A[j] c7 sum(ti-2) n=j c8 sum(ti-2) do j<-j+1 c9 sum(ti-1) A[n]<-A[i] c10 n-1 A[i]<-key c11 n-1
其中i的取值为1 to n-1
运行次数*运行时间即可得到算法复杂度,可以看出,计算后的最高项为n^2,因此次算法复杂度为O(n^2)。
算法C++实现代码如下:
#include<iostream>
int main()
{
int A[10]={5,3,1,7,9,2,6,4,10,8};
for (int i=0;i<=8;i++)
{
int key=A[i];
int j=i+1;
int n=i;
while (j<=9)
{
if (key<A[j])
{
key=A[j];
n=j;
}
j++;
}
A[n]=A[i];
A[i]=key;
}
return 0;
}