栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++数据结构——直接插入排序(图文)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++数据结构——直接插入排序(图文)

直接插入排序是比较简单的排序算法,它主要是将我们要排序的序列分成两个部分,一个有序一个无序,然后将无序序列中的值依次插入到有序序列中。
这么讲如果不能理解,我们拿例子去讲,假如有序列8 7 2 1 5 9 3这么一个序列,如下表所示。我们要将这个序列进行升序排序,接下来演示插入排序的过程。
初始序列

8721593

第一次排序
从前往后排,将8作为我们的有序序列的第一个值,而8后面的值都是无序的,也就是得到(8)7 2 1 5 9 3这么一个序列。

*8 *721593

第二次排序
第二次从无序序列中找到第一个值也就是7,然后将其插入到有序序列中,也就是插到8的前面,这里就需要将8往后移动一个位置,得到排好的序列
(7 8)2 1 5 9 3

7821593

第三次排序
从无序序列中找到第一个值也就是2,然后将其插入到有序序列中,也就是插到7的前面,需要将7 8后移一位,然后再将2插入,得到排好的序列
(2 7 8)1 5 9 3

2781593

第四次排序
从无序序列中找到第一个值也就是1,然后将其插入到有序序列中,也就是插到2的前面,需要将2 7 8后移一位,然后再将1插入,得到排好的序列
(1 2 7 8)5 9 3

1278593

按照上上述步骤方法进行排序,下面步骤就不多做解释了。
第五次排序
(1 2 5 7 8)9 3

1257893

第六次排序
(1 2 5 7 8 9 )3

1257893

第七次排序
(1 2 3 5 7 8 9 )

1235789

直至得到完整的有序序列,直接插入排序结束。要注意的就是要移动序列的时候的问题。具体看题目解题代码,如下:

习题8-1 直接插入排序

给定一个整数序列,请按非递减序输出采用直接插入排序的各趟排序后的结果。

输入格式:

测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个整数。

输出格式:

对于每组测试,输出若干行,每行是一趟排序后的结果,每行的每两个数据之间留一个空格。

输入样例:
4
8 7 2 1
输出样例:
7 8 2 1
2 7 8 1
1 2 7 8

代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

解题代码

#include
using namespace std;
int main()
{
	int n,t;
	while(cin>>n){
		int nums[n+1];
		for(int i=0;i
			cin>>nums[i];
		}
		for(int i=1;i
			t=nums[i];
			for(int j=0;j
				if(nums[j]>t){
					for(int k=i;k>=j+1;k--){
						nums[k]=nums[k-1];
					}
					nums[j]=t;
					break;
				}
			}
			for(int j=0;j
                if(j==0)
				cout<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965923.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号