最坏情况下,即待排序记录初始状态是按第一条记录最大,之后的记录从大到小顺序排列,则需要移动记录的次数最多为3(n-1)。简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n^2),进行移动操作的时间复杂度为O(n)。
#include <stdio.h>
void swap(int *a,int *b){
int t=*a;
*a=*b;
*b=t;
}
void selectsort(int a[],int n){
int flag=1;
int j,max;
for(int i=0;i<n;i++){
max=i;
for(j=i+1;j<n;j++){
if(a[max]<a[j]){
max=j;
}
}
if(max!=i) {
swap (&a[max],&a[i]);
}
}
}
void printarr(int a[],int n){
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");//养成好习惯
}
int main()
{
int arr[] = { 0, 22, 2, 33, 3, 1, 6, 5, 8, 9 };
int sizeofnum=sizeof(arr)/sizeof(int);
selectsort(arr,sizeofnum);
printarr(arr,sizeofnum);
return 0;
}