(1)简单选择排序的基本思想来自人们对排序过程最直接的认识:不断从待排序序列中挑选出关键字最小的元素,依次放在已排序子序列的最后,直到待排序序列中所有元素都被选完,从而得到一个有序的序列。选择排序算法的设计同样可以借助蛮力法进行。
(2)设待排序线性表为L,选择排序过程共需执行N-1遍操作,具体步骤如下:
① 在第i次挑选中(1<=i<=N-1)重复下述过程:让元素L[i]依次与元素L[i+1],L[i+2],……L[N]比较,如果L[i].key>L[j].key(i<=j<=N),就交换元素L[i]与L[j]在线性表中的位置。
② i=i+1,重复步骤①
(3)简单选择排序的算法
void SelectSort(int list[],int n){
int i,j,k,temp;
for(i=1;i<=n-1;++i){
k=i;
for(j=i+1;j<=n;j++){
if(list[j]k=j;
}
if(i!=k){
temp=list[i];
list[i]=list[k];
list[k]=temp;
}
}
}
(4)完整程序
#include
#define N 20
int list[N+1];
void insertSort(int list[],int n){
int i,j;
for(i=2;i<=n;i++){
list[0]=list[i];
j=i-1;
while(j>0&&list[0]
list[j+1]=list[j];
j--;
}
list[j+1]=list[0];
}
}
void bubbleSort(int list[],int n){
int i=1,j,t,flag=1;
for(i=1;i
flag=0;
for(j=1;j<=n-1;j++){
if(list[j]>list[j+1]){
t=list[j];
list[j]=list[j+1];
list[j+1]=t;
flag=1;
}
}
}
}
void SelectSort(int list[],int n){
int i,j,k,temp;
for(i=1;i<=n-1;++i){
k=i;
for(j=i+1;j<=n;j++){
if(list[j]k=j;
}
if(i!=k){
temp=list[i];
list[i]=list[k];
list[k]=temp;
}
}
}
int main(){
int i,n;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&list[i]);
}
//insertSort(list,n);
//bubbleSort(list,n);
SelectSort(list,n);
for(i=1;i<=n;i++){
printf("%d ",list[i]);
}
return 0;
}