直接插入排序
-
什么是直接插入排序
直接插入排序 是一种最简单的排序方法,其基本操作就是将一条记录插入到已经排好序的序列中,从而得到一个新的、记录数量增1的有序表。
-
直接插入排序的算法步骤
(1)设待排序的记录放在数组r[1…n]中,r[1]是一个有序序列。
(2)循环n-1次,每次使用顺序查找法,查找了r[i]在已经排好序的序列了r[1…i-1]的插入位置,然后将其插入到一个表长为i-1的有序序列,依次循环,最后得到一个表长为n的序列。 -
代码实现
#include<iostream>
using namespace std;
#define MAXSIZE 20
typedef int KeyType;
typedef struct
{
KeyType key;//关键字
int other;//其他信息
}RedType;
typedef struct
{
RedType r[MAXSIZE];
int length;
}SqList;
void CreateSqList(SqList &L)
{
cout << "表的长度:";
cin >> L.length;
cout << "表的关键字信息:";
for (int i = 0; i < L.length; i++)
{
cin >> L.r[i].key;
}
}
void Sort(SqList& L)
{
for (int i = 1; i < L.length; i++)
{
if (L.r[i].key < L.r[i - 1].key)
{
KeyType key = L.r[i].key;
L.r[i].key = L.r[i - 1].key;
int j;
for (j = i - 2; j>=0; j--)
{
if (key < L.r[j].key)
{
L.r[j + 1].key = L.r[j].key;
}
else
{
break;
}
}
L.r[j+1].key = key;
}
}
}
void Show(SqList L)
{
for (int i = 0; i < L.length; i++)
{
cout << L.r[i].key << " ";
}
}
int main()
{
SqList L;
CreateSqList(L);
Sort(L);
cout << "排好序的表为:";
Show(L);
return 0;
}