实验6:排序

基本内容:
采用顺序存储结构,完成顺序表的创建,实现对顺序表的直接插入排序、冒泡排序。并在此基本内容的基础上,实现对顺序表的快速排序或别的排序。
实验原理
(1)直接插入排序的基本思想是:通过一趟排序将待排序的当前记录插入到前面已经排好序的有序序列中,从而得到一个新的、记录数增1的有序序列。整个排序过程可简述为:先将序列中的第一个记录看成是一个有序的子序列,然后从第二个记录起逐个插入,直至整个序列有序。
(2)快速排序是对起泡排序的一种改进,其基本思想是:通过一趟排序将带排记录分割成独立的两部分,其中一部分记录的关键字都比另一部分记录的关键字小,然后再分别对这两部分继续进行排序,以达到整个序列有序;
(3)(2-路)归并排序是基于归并操作(即将两个有序序列组合成一个新的有序序列)实现排序。这里将含有n个记录的初始序列看成是n个有序的子序列,每个子序列长度为1,然后开始两两归并,直至得到一个长度为n的有序序列为止;
<
#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);
}
}
void Print(Sqlist L) {
for (int i=1;i <=L.length;i++)
printf(”%d “,L.r[i].key);
printf(”\n\n");
}
int Patition(Sqlist &L,int low,int high){
L.r[0] = L.r[low];
int pivotkey=L.r[low].key;
while(low<high){
while(low<high&&L.r[high].key>=pivotkey)
–high;
L.r[low]=L.r[high];
while(low<high&&L.r[low].key<=pivotkey)
++low;
L.r[high]=L.r[low];
}
L.r[low]=L.r[0];
return low;
}
void QSort(Sqlist &L, int low, int high) {
if(low<high){
int pivotloc=Patition(L,low,high);
QSort(L,low,pivotloc-1);
QSort(L,pivotloc+1,high);
}
}
void QuickSort(Sqlist &L){
QSort(L, 1, L.length);
Print(L);
}
int main()
{
Sqlist L;
Create(L);
printf(“对顺序表的直接插入排序结果为:\n”);
InsertSort(L);
printf("\n对顺序表的冒泡排序结果为:\n");
BubbleSort(L);
printf("\n对顺序表的快速排序结果为:\n");
QuickSort(L);
system(“pause”);
return 0;
}
/>
在这里插入图片描述

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cai-4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值