读算法导论日志:插入排序

InsertionSort是最简单的排序,算法复杂度为On^2

以下是插入排序的伪代码

INSERTIONSORT(A)

for j = 2 to A.length

//insert A[j] in the unsorted area to the sorted 1 to j - 1 region

key = A[j]

i = j -1

while i > 0 and A[i] > key

A[i+1] = A[i]

i--

A[i+1] = key

 

在这个算法当中,整个数组被分成两部分,左边排好序的部分和右面未排序的部分,每次从右面取一个元素插入有序区。

初始化:起始有序区只有一个元素,此时有序区显然有序

保持:每一次迭代都是将无序区最左面一个元素插入到有序区之中过后有序区都会增长1个元素仍为有序

终止:循环终止时j = A.length此时最后一轮操作是将秩为j的元素插入到1~j-1的有序区当中,因此整个数组是有序的。

 下面是使用C++实现的代码及测试,如有不规范的地方,还望高人指点。

#include <iostream>
using namespace std;
void InsertionSort( int * A, int size);


void InsertionSort(int * A, int size)
{
	int key = 0, i = 0;
	for (int j = 1; j < size ; j ++ )
	{
		key = A[j];			//当前循环位置的数组元素 
		i = j - 1;			//有序区的右界,下面的循环将key插入至有序区内 
		while ( i >= 0 && (A[i] > key)) 
			{
				A[i + 1] = A[i];//大于key的部分向右移动一个位置 
				i = i - 1;
				
			}
		A[i + 1] = key;//最后把key值放到他应当放到的位置 
	}
}

int ArryTest[] = { 5, 2, 4, 6, 1, 3};
int main() {
	
	for( int i = 0; i < 6 ;i ++)
		cout<<" " << ArryTest[i]<<" " ;
	InsertionSort(ArryTest, sizeof(ArryTest)/sizeof(ArryTest[1]));
	cout<<endl;
	for( int i = 0; i < 6 ;i ++)
		cout<<" " << ArryTest[i]<<" " ;
	return 0;
}
PS:这是我的第一篇blogs 也许不会有人读到,但一定可以激励自己努力学好算法,把自己的兴趣坚持下去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值