直接插入排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

using namespace std;

void insert_sort(int a[],int length)

{

int t;

for(int i=0;i

{

t=a[i]; //将待排序的元素a[i]赋给t

for(int j=i-1;j>=0&&a[j]>t;j--)

{

a[j+1]=a[j]; //把比t大(a[j]>t)的元素,全部后移一个位置 }

a[j+1]=t; //把待排序的t插入到a[j+1].完成插入排序过程。 }

}

int main()

{

int a[5]={12,5,41,36,89};

insert_sort(a,5);

for(int i=0;i<5;i++)

cout<

return 0;

}

//直接插入排序算法

#include

using namespace std;

#define MAXSIZE 20 //定义顺序表的最大长度

//定义顺序表的存储结构

typedef int KeyType; //定义关键字为整数类型typedef struct

{

KeyType key; //关键字项

} RedType; //记录类型

typedef struct

{

RedType r[MAXSIZE+1]; //r[0]用作哨兵单元

int length; //顺序表长度

} SqList; //顺序表类型

//函数原型声明

void InitiSeqList(SqList &L, int n); //初始化顺序表函数

void DisplayNoSort(SqList &L); //输出排序前的顺序表

bool LT(int a, int b); //关键字比较函数

void InsertSort(SqList &L); //插入排序函数

void DisplayInsertSort(SqList &L); //输出排序后的顺序表

//main函数

int main()

{

SqList seqlist;

InitiSeqList(seqlist,MAXSIZE);

DisplayNoSort(seqlist);

InsertSort(seqlist);

DisplayInsertSort(seqlist);

return 0;

}

//初始化顺序表函数,初始化为含n个元素的顺序表

void InitiSeqList(SqList &L, int n)

{

L.length=n; //顺序表长度

for(int i=1; i<=L.length; ++i)

{

L.r[i].key=rand()%90+10; //产生10到100之间的随机数}

}

//输出排序前的顺序表

void DisplayNoSort(SqList &L)

{

cout<<"插入排序前的顺序表:"<

for(int i=1; i<=L.length; ++i)

{

cout<

if(i%10==0)

cout<

}

}

//关键字比较函数

bool LT(int a, int b)

{

return a

}

//插入排序函数

void InsertSort(SqList &L)

{

// 对顺序表L作直接插入排序

int i,j;

for (i=2; i<=L.length; ++i)

if (LT(L.r[i].key, L.r[i-1].key)) // "<"时,需将L.r[i]插入有序子表{

L.r[0] = L.r[i]; // 复制为哨兵

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]; // 插入到正确位置

}

} // InsertSort

//输出经直接插入排序后的顺序表

void DisplayInsertSort(SqList &L)

{

cout<<"插入排序后的顺序表:"<

for(int i=1; i<=L.length; ++i)

{

cout<

if(i%10==0)

cout<

}

}