#include
当前位置:文档之家› 起泡、直接插入排序、 简单选择排序、快速排序、希尔排序和堆排序

起泡、直接插入排序、 简单选择排序、快速排序、希尔排序和堆排序

实验八: 排序的基础实验
完成起泡、直接插入排序、简单选择排序、快速排序、希尔排序和堆排序中的三种排序方法,写成函数的形式
程序代码如下:
#include"stdafx.h"
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
typedef struct
{
int elem;
}num;
void print(num *L,int n)
{
int i;
for(i=1;i<=n;i++)
printf("%6d",L[i].elem);
printf("\n");
}
void binsertsort(num *L,int n)//插入排序
{
int i,m,j,low,high;
for(i=2;i<=n;i++)
{
L[0]=L[i];
low=1;
high=i-1;
while(low<=high)
{
m=(low+high)/2;
if(L[0].elem<L[m].elem)
high=m-1;
else
low=m+1;
}
for(j=i-1;j>=high+1;j--)
L[j+1]=L[j];
L[high+1]=L[0];
}
}
void bubble(num *L,int n)//起泡排序{
int i,j,t;
for(i=1;i<n;i++)
{
for(j=2;j<=n-i+1;j++)
{
if(L[j].elem<L[j-1].elem)
{
t=L[j].elem;
L[j].elem=L[j-1].elem;
L[j-1].elem=t;
}
}
}
}
void selectsort(num *L,int n)//选择排序{
int i,j,t;
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
if(L[i].elem>L[j].elem)
{
t=L[i].elem;
L[i].elem=L[j].elem;
L[j].elem=t;
}
}
}
}
void main()
{
int i,t,n,m;
num *list,*sqlist;
printf("========================= =========欢迎使用================================= ====\n");
printf("\n\n*************************** *****排序演示系统***********************************\n ");
printf("请输入数字个数:");
scanf("%d",&n);
list=(num *)malloc((n+1)*sizeof(num)); printf("输入的数据为:");
for(i=1;i<=n;i++)
{
scanf("%d",&t);
list[i].elem=t;
}
printf("插入排序的结果为:"); binsertsort(list,n);
print(list,n);
printf("起泡排序的结果为:");
bubble(list,n);
print(list,n);
printf("选择排序的结果为:"); selectsort(list,n);
print(list,n);
}
程序结果如下:。

相关主题