选择排序算法实验: 编写一个直接插入排序方法,输入序列关键字{13,22,35,43,54,68,71,82,98,1005},然后将此序列升序排序,并输出前5个关键字值的和。
COMMON.H
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
INSORT.H
#include"common.h"
typedef int KeyType;
typedef int OtherType;
typedef struct
{
KeyType key;
OtherType other_data;
}RecordType;
void CreateListRand(RecordType r[],int len);
void InsSort(RecordType r[],int len);
INSORT.C
#include"insort.h"
void CreateListRand(RecordType r[],int len)
{
int i,a[100];
printf(“输入的列表为:\n”);
for (i=1;i<=len;i++)
{
scanf("%d",&a[i]);
r[i].key=a[i];
}
}
void InsSort(RecordType r[],int len)
{
int i,j;
for(i=2;i<=len;i++)
{
r[0]=r[i];
j=i-1;
while(r[0].key<r[j].key)
{
r[j+1]=r[j];
j–;
}
r[j+1]=r[0];
}
}
MAIN.C
#include"insort.h"
int main()
{
int i, len,add=0;
printf(“内部排序算法–直接插入排序\n************************************\n”);
printf(“请输入顺序表长度(不超过20):”);
fflush(stdin);
scanf("%d",&len);
RecordType rt[len+1];
CreateListRand(rt,len);
InsSort(rt,len);
printf("排序后的序列为:\n");
for(i=1;i<=len;i++)
{
printf("%-6d",rt[i].key) ;
if(i<=5)
add=add+rt[i].key;
}
printf("\n");
printf("前五位的和为:%d \n",add);
return 0;
}