内部排序(直接插入排序、冒泡排序)

采用顺序存储结构,完成顺序表的创建,实现对顺序表的直接插入排序、冒泡排序。

#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);
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值