码迷,mamicode.com
首页 > 其他好文 > 详细

[3] 算法之路 - 插入排序

时间:2014-08-21 00:13:13      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:算法   插入排序   

插入排序算法

1、将排序部分分成两部分

2、每次从后面部分取最前面的数插入到前面部分的适当位置


该处提供两个插入排序版本,指定间隔插入与插入排序。后面对指定间隔排序提到Shell排序中的n/2间隔与Sedgewick间隔

例如:

排序前:92 77 67 8 6 84 55 85 43 67

[77 92] 67 8 6 8455 85 43 67 将77插入92前

[67 77 92] 8 6 8455 85 43 67 将67插入77前

[8 67 77 92] 6 8455 85 43 67 将8插入67前

[6 8 67 77 92] 8455 85 43 67 将6插入8前

[6 8 67 77 84 92]55 85 43 67 将84插入92前

[6 8 55 67 77 8492] 85 43 67 将55插入67前

[6 8 55 67 77 84 8592] 43 67 ......

[6 8 43 55 67 77 8485 92] 67 ......

[6 8 43 55 67 67 7784 85 92] ...... 


// 插入排序
int InsertionSort(int a[],int lens)
{
	int k;
	int tmp;
	for(int i=1;i<lens;i++)
	{
		int j=i-1;
		//取出待插数据
		tmp = a[i];
		
		// 遍历前面已排好序的序列,找插入位置
		// 在i之前查找需待插入数据a[i]的位置k
		for(k=j;k>=0;k--)
		{
			if(tmp<a[k]) a[k+1]=a[k];// 后移
			else break;//找到位置

		}
		// 找到位置,插入指定值
		if(i!=(k+1))a[k+1]=tmp;
	}
	return 0;
}

// 插入排序 - 使用指定间隔的
int InsertionSortWithGap(int a[],int lens,int gap)
{
	int k,tmp;
	// 控制插入层
	for(int m=0;m<gap;m++)
	{
		for(int i=gap+m;i<lens;i+=gap)
		{
			int j=i-gap;
			tmp=a[i];
			for(k=j;k>=0;k-=gap)
			{
				if(tmp<a[k]) a[k+gap]=a[k];
				else break;
			}
			if(i!=(k+gap))a[k+gap]=tmp;
		}
	}
	return 0;
}


[3] 算法之路 - 插入排序,布布扣,bubuko.com

[3] 算法之路 - 插入排序

标签:算法   插入排序   

原文地址:http://blog.csdn.net/vivitue/article/details/38716103

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!