三、选择类排序
(1)简单选择排序
***思想
第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行
交换。共需进行n-1趟简单选择排序,直到所有记录排序完成为止。
***算法
void SelectSort(RecordType r[],int n)
{
for(i = 1 ; i<=n-1 ; i++)
{
k = i; //k指向找到的下一个最小元素
for(j = i+1 ; j<=n ; j++)
{
if(r[j].key < r[k].key)
{
k = j ;
}
}
if(k != i)
{
x = r[i];
r[i] = r[k];
r[k] = x;
}
}
}
***案例
#include<stdio.h>
#include<stdlib.h>
typedef int KeyType;
typedef int OtherType;
typedef struct _RecordType
{
KeyType key;
OtherType other_data;
}RecordType;
void SelectSort(RecordType r[],int n)
{
int i,j,k;
RecordType x;
for(i = 1;i<=n-1;i++)
{
k = i;
for(j = i+1;j<=n;j++)
{
if(r[j].key<r[k].key)
{
k = j;
}
}
if(k != i)
{
x = r[i];
r[i] = r[k];
r[k] = x;
}
}
}
int main()
{
int n,i;
RecordType r[20];
printf("请输入数组的长度:\n");
scanf("%d",&n);
for(i = 1;i<=n;i++)
{
printf("请输入数组的第%d个元素: ",i);
scanf("%d",&r[i].key);
}
printf("\n");
printf("排序前的结果为:\n");
for(i = 1;i<=n;i++)
{
printf("%d ",r[i].key);
}
printf("\n");
SelectSort(r,n);
printf("排序后的结果为:\n");
for(i = 1;i<=n;i++)
{
printf("%d ",r[i].key);
}
printf("\n");
return 0;
}