直接插入排序C++实现

算法思想:

    要对元素个数为n(n>=1)的数组进行从小到大的顺序排序,首先可以把第一个元素arr[0]当做是一个初始有序序列,然后从这个有序序列之外的下一个元素开始,分别和其上一个元素进行比较,如果当前元素小于上一个元素,那么就将该元素插入到之前已经有序的序列合适的位置…… 如果你玩过斗地主,以上所有的理论说明你都可以忽略:

       你在玩斗地主摸牌并整理的过程实际上就是一个直接插入排序。你首先摸一张牌,并把该牌作为基准,当你摸到下一张牌的时候,你会和上一张牌进行比对,如果第二张牌小于第一张牌,那么你可能会放到该牌的左边;接下来你摸第三张牌,之前手里的2张牌你已经排好序了,你会把第三张摸起来的牌首先和前面2张牌的最后一张进行比对,如果第三张牌比后面一张牌小,那么你会继续将这张牌和最前面的那张牌进行比对,如果还小,那么就放到最开始的位置,否则就插入到之前已经排好序的2张牌的中间,以此类推……

  该排序算法的最好情况下的时间复杂度是O(n);平均时间复杂度O(n^2);最坏时间复杂度O(n^2); 是一个稳定的排序算法。

代码实现:

  

#include <iostream>
#include <stdlib.h>
using namespace std;
void insertionSort(int arr[], int len){
	if (len <= 0)
		return;
	for (int i = 1; i < len; ++i){
		//把arr[0]当做一个初始的有序序列,所以i从1开始
		if (arr[i] < arr[i - 1]){
			int curVal = arr[i];
			int curIndex = i;
			while (curIndex > 0){
				if (curVal < arr[curIndex - 1]){
					arr[curIndex] = arr[curIndex - 1];
				}
				else
					break;
				--curIndex;
			}
			arr[curIndex] = curVal;
		}
	}
}
int main(){
	int arr[] = { 7, 4, 9, 2, 8, 6, 1, 5, 3, 0 };
	int len = sizeof(arr) / sizeof(arr[0]);
	insertionSort(arr, len);
	for (int i = 0; i < len; ++i){
		cout << arr[i] << endl;
	}
	system("pause");
	return  0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值