采用顺序存储结构,完成顺序表的创建,实现对顺序表的直接插入排序、冒泡排序。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
#define FALSE 0
#define TRUE 1
typedef int KeyType;
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)<(b))
#define LQ(a,b) ((a)<=(b))
typedef struct{
KeyType key;//关键字项
}RcdType;
typedef struct{
RcdType r[MAXSIZE+1];//r[0]闲置或用作哨兵
int length;
}Sqlist;
typedef RcdType ElemType;
int Create(Sqlist &L)
{
int i,n;
printf("请输入数据的个数:\n");
scanf("%d",&n);
printf("请输入各数据:\n");
for(i=1;i<=n;i++)
{
scanf("%d",&L.r [i].key);
}
L.length =n;
return 1;
}
void InsertSort(Sqlist &L)
{//生成按关键字非递减有序序列
int i,j;
for(i=2;i<=L.length ;++i)
if(LT(L.r [i].key,L.r [i-1].key))
{
L.r [0]=L.r [i];//L.r[0]为监视哨
for(j=i-1;LT(L.r [0].key,L.r [j].key);--j)
L.r [j+1]=L.r [j];
L.r [j+1]=L.r [0];
}
for(int i=1;i<=L.length ;i++)
{
printf("%d ",L.r [i].key);
}
}
void BubbleSort(Sqlist &L)
{
for(int i=L.length ,change=TRUE;i>1&&change;--i)
{
change=FALSE;
for(int j=1;j<i;++j)
if(LT(L.r [j+1].key,L.r [j].key))
{
ElemType temp=L.r [j];
L.r [j]=L.r [j+1];
L.r [j+1]=temp;
change=TRUE;
}
}
for(int i=1;i<=L.length ;i++)
{
printf("%d ",L.r [i].key);
}
}
int main()
{
Sqlist L;
Create(L);
printf("对顺序表的直接插入排序结果为:\n");
InsertSort(L);
printf("\n对顺序表的冒泡排序结果为:\n");
BubbleSort(L);
}