内部排序(直接插入排序、冒泡排序)
采用顺序存储结构,完成顺序表的创建,实现对顺序表的直接插入排序、冒泡排序。
#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);
}
更多推荐
内部排序(直接插入排序、冒泡排序)
发布评论