C++ 插入排序

插入排序的概念:将数据插入到一个有序的序列中,从而得到一个新的有序的序列。
 

例如定义一个乱序的数组

int a[10] = {23,31,11,24,1,4,7,9,36,42};

排序方法:

  1. 我们通常将数组第一个元素a[0]=23作为已经排好序的序列
  2. 然后从第二个元素a[1]=31开始,和之前已经排好序的序列进行比较。如果当前元素小于之前的元素就将之前元素往后面移,直到当前元素大于之前元素,将当前元素插入

第一次排序:发现比较简单,因为元素a[1]<a[0],直接将元素进行交换位置得到一个新的有序序列 {23,31}

第二次排序:是在第一次排序完成的基础上进行的,所以使用a[2] = 11 和之前的序列{23,31}里面的每一个元素去比较,比较的顺序是从后面向前面比较

  • 也就是从a[1]=31开始与11比较,如果a[1]>11 ,则把a[1] 往后移动一个位置则a[2]=31,a[1]暂时为空
  • 继续与之前的元素比较,也就是与a[0]=23与11比较,如果a[0]>11,则把a[0],往后面移动一个位置,即a[1]=23,a[0]为空
  • 然后继续往前比较,发现已经没有元素,所以就可以把11插入到当前结束的空位置a[0] = 11

下面的排序依旧根据这种原理来做,最后根据思路得到完整程序:

#include <iostream>
using namespace std;
int a[10] = {31,23,11,24,1,4,7,9,36,42};
int main() {
	int temp;//临时变量,因为a[i]是当前元素,会变成空位置
	for (int i = 0 ; i < 10 ; i ++)
		cout << a[i] << " ";
	cout << endl;
	for (int i = 1 ; i < 10 ; i ++) {
		temp = a[i];//保存当前元素
		while(i > 0 && a[i-1]>temp) {
			a[i] = a[i-1];//将大于当前元素的前一个元素往后面移动
			i--;
		}
		a[i] = temp;//将空位置补上当前元素
	}
	for (int i = 0 ; i < 10 ; i ++) 
		cout << a[i] << " ";
	return 0;
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值