3、插入排序

3、插入排序

思路分析

先给定一个乱序的数组int arr[10] = {1, 2, 66, 33, 88, 100, 18, 78, 12, 321};

先假定一个数组是有序的,然后查找一个位置(前一个小于这个数,后一个大于这个数),这个时候把这个位置存这个数,这个数后的有序序列集体后移

第一轮:1,2,33,66,88,100,18,78,12,321

第二轮:1,2,18,33,66,88,100,78,12,321

第三轮:1,2,18,33,66,78,88,100,12,321

第四轮:1,2,12,18,33,66,78,88,100,321

排序完毕。

#include <bits/stdc++.h>
using namespace std;
void insert_sort(int* a, int len);
void print(int* a, int len, bool isBefore= true);
int main(){
	int arr[10] = {1, 2, 66, 33, 88, 100, 18, 78, 12, 321};
	print(arr, 10);
	cout << "插入排序:" << endl;
	insert_sort(arr, 10);
	print(arr, 10, false); 
	return 0;
}
void insert_sort(int* a, int len){
	int temp;
	int j; 
	for(int i = 1; i < len;i++){//从第二个开始,到最后一插入到有序数组中
	 //临时存储待插数据
	 temp = a[i];
	 j = i - 1;
	 while(j >= 0 && a[j] > temp) {//j的范围,只有a[j]大于temp才往后覆盖
	 a[j + 1] = a[j];
	 j--; 	
	 }
	 a[j+1] = temp;//temp覆盖回来 
	
	} 
}
void print(int* a, int len, bool isBefore){
 	if(isBefore)
 		cout << "before sort:";
 	else
 		cout << "after sort:";
 		
 	for(int i = 0; i< len; i++){
 		cout << a[i] << " ";
	 }
 	cout << endl;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

允谦呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值