#include<stdio.h>
#include<stdlib.h>
#define Status int
#define max 20
typedef struct {
Status key;
}ElemType;
typedef struct {
ElemType r[max];
int length;
}Sqlist; //定义直接插入排序的数组的结构体
void Inital(Sqlist &L) //初始化数组,
{
L.r[1].key=49;
L.r[2].key=38;
L.r[3].key=65;
L.r[4].key=97;
L.r[5].key=76;
L.r[6].key=13;
L.r[7].key=27;
L.r[8].key=49;
L.length=8;
}
bool LT(int i,int j) //比较两个参数的大小
{
if(i<j)
return true;
else return false;
}
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[i]=l.r[i-1]; //让有序序列的最后一个元素放在新加入元素的位置
for(j=i-2;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循环中结束时将j--了,所以新加入元素的真确位置应为j+1)
}
}
}
void print(Sqlist l) //输出
{
int i;
printf("排序后的结果为:");
for(i=1;i<=l.length;i++)
{
printf("%d ",l.r[i].key);
}
}
void main()
{
Sqlist l;
Inital(l);
Insertsort(l);
print(l);
getchar();
getchar();
}
//算法分析:1.直接插入排序不需要辅助空间
//2.算法的时间复杂度为O(n^2)
//3.直接插入排序是稳定的排序方法
排序算法----直接插入排序
最新推荐文章于 2024-04-02 21:45:33 发布