插入排序--直接插入排序

插入排序--直接排序

基本思想:从最初已经排好序的只有一个元素,待排序的元素包含其余的所有元素。重复执行以下操作:将待排序中的元素取出,插入到已经有序的序列。直至待排序的元素都插完为止。

插入方法:将待插入的元素与已有序序列进行比较,进行向前(向后)移位,直到待插入元素小于(大于)待排序中的下一元素。

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");
}


转载于:https://my.oschina.net/linx/blog/506083

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值