题:
C代码:
#include<stdio.h>
#define N 8
int main(){
int r[N]={25,36,48,65,25,12,43,57};
int i,j,flag,temp;
for(i=0;i<N;i++){//共n-1趟排序
flag=i;//flag保存排序吗最小记录的下标,初值为i flag=0
for(j=i+1;j<N;j++){//第i趟,经过n-i次比较选出最小的记录
if(r[j]<r[flag]){
flag=j;
}
}
if(flag!=i){//将排序码最小的记录放到子区间的第一个位置
temp=r[i];//交换
r[i]=r[flag];
r[flag]=temp;
}
}
//排序好输出结果
for(i=0;i<N;i++){
printf("%d ",r[i]);
}
return 0;
}
运算结果:
*时间复杂度*:无论n个待排序记录的初始状态如何,在第i趟排序过程中,都要经过n-i次比较
才能选出排序码最小的记录,平均时间复杂度为O(n2)
*空间复杂度*:只需要一个用于交换记录的辅助空间,所以直接选择排序的空间复杂度为O(1)
*稳定性*:不稳定