“直接插入排序”C++/python实现

对一组数据进行插入排序的方法是:

1)假定一组数据的第一个是有序的,剩下的是无序的。

2)从无序数据中取第一个,与有序数据组相比较,插入到有序数据中。

3)从无序数据再取第一个,与有序数据组相比较,插入到有序数据中。

4)无序数据中取完,即排序完成。

比如:3 ,7 ,9 ,10, 0这一组数据,从小到大排序:

第一次排序:3,7,9,0,10,3是有序数据组,7,9,0,10是无序数据组,将无序数据组第一个7取出,插入到有序数据组,此时有序数据组为3,7,无序数据组为9,0,10。

第二次排序:将无序数据组第一个9取出,插入到有序数据组,此时有序数据组为3,7,9,无序数据组为0,10。

第三次排序:将无序数据组第一个0取出,插入到有序数据组,此时有序数据组为0,3,7,9,无序数据组为10。

         数据插入有序数据组的方法是:将数据0与有序数据组比较:

         1)比较数据0小于9,9向后挪一位;

         2)比较数据0小于7,7向后挪一位;

        3)比较数据0小于3,3向后挪一位;

        4)插入数据0即可

第四次排序:将无序数据组第一个10取出,插入到有序数据组,此时有序数据组为0,3,7,9,10,排序完成。

数据对于C/C++来说存储在数组中,python存储在列表中,排序过程完全一样。

直接插入排序经过两个循环,复杂度为O(n^2)。

C++实现:

# include <iostream>

using namespace std;

#define TEST_ARRAY_LEN  7

void insert_sort(int test[], int len)
{
	int i,j, temp;

	for(i = 1; i < len; i++)
	{
		temp = test[i];
		for(j = i - 1; j >= 0 && test[j] > temp; j--)
		{
			test[j + 1] = test[j];
		}
	
		test[j + 1] = temp;
	}

	return;
}

void main()
{
	int test[TEST_ARRAY_LEN] = {2,5,1,6,7,3,4};
	insert_sort(test, TEST_ARRAY_LEN);
	for (int i =0; i < TEST_ARRAY_LEN; i++)
	{
		cout << test[i] << " ";
	}
	cout << endl;
}

python实现:

#!/usr/bin/python  
# -*- coding: utf-8 -*-  

def insert_sort(list, n):
	if (n > len(list)):
		return
	for i in range(1, n):
		temp = list[i]
		for j in range(i, -1, -1):
			if list[j - 1] > temp:
				list[j]  = list[j - 1]
			else:
				break
		list[j]  = temp
	return list
	
a = [2,5,1,6,7,3,4,10,9,20,8]
print insert_sort(a,len(a))

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值