插入排序--直接排序
基本思想:从最初已经排好序的只有一个元素,待排序的元素包含其余的所有元素。重复执行以下操作:将待排序中的元素取出,插入到已经有序的序列。直至待排序的元素都插完为止。
插入方法:将待插入的元素与已有序序列进行比较,进行向前(向后)移位,直到待插入元素小于(大于)待排序中的下一元素。
C++代码实现:
#include<iostream>
#include<time.h>
using namespace std;
template<class Type> struct ElementType
{
Type key;
};
template<class Type> struct SqList
{
ElementType<Type>* elem;
int length;//表中元素个数
int listsize;//表长度
};
template<class Type> void insertSort(SqList<Type>& List)
{
//对顺序表遍历
for (int i = 2; i < List.length; i++)
{
//如果后者小于前者,将元素后移后插入
if (List.elem[i].key < List.elem[i-1].key)
{
List.elem[0] = List.elem[i];
//找出插入位置,并后移元素
int j = i - 1;
for (; List.elem[0].key < List.elem[j].key; j--)
List.elem[j + 1] = List.elem[j];
List.elem[j + 1] = List.elem[0];
}
}
}
void main()
{
SqList<int> List;
List.length = 0;
List.listsize = 20;
List.elem = new ElementType<int>[List.listsize];
//随机生成数组元素
for (int i = 1; i < 10; i++)
{
srand(time(0)+i*10000);
List.elem[i].key = rand() % 50;
List.length++;
}
for (int i = 1; i < List.length; i++)
cout << List.elem[i].key << ' ';
cout << endl;
//插入排序
insertSort(List);
cout << "Sorted: " << endl;
for (int i = 1; i < List.length; i++)
cout << List.elem[i].key << ' ';
cout << endl;
system("pause");
}