---恢复内容开始---
算法思想:
n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序
在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
③第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
#include<stdio.h>
#include<stdlib.h>
void swap(int *a,int *b)
{
int t=*a;
*a=*b;
*b=t;
}
void selectsort(int a[],int n)
{
int mark=0;
int flag=0;
for(int i=0;i<n;i++)
{
int min=a[i];
for(int j=i+1;j<n;j++)
{
if(min>a[j])
{
mark=j;
min=a[j];
flag=1;
}
}
if(flag)
swap(&a[i],&a[mark]);
flag=0;
}
}
void main()
{
int n;
scanf("%d",&n);
int *a=malloc(sizeof(int)*n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
selectsort(a,n);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
---恢复内容结束---