初级排序算法之插入排序

一、插入排序

插入排序的原理是它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,

找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),

因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间


二、插入排序的步骤

1、从第一个元素开始,该元素可以认为已经被排序

2、取出下一个元素,在已经排序的元素序列中从后向前扫描

3、如果该元素(已排序)大于新元素,将该元素移到下一位置

4、重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

5、将新元素插入到该位置后

6、重复步骤2~5


三、选择排序的特点

1、所需时间取决于输入的初始序列顺序

2、最好情况下(已经有序),需要比较N-1次,最坏需要比较N(n-1)/2次

3、最好情况下需要交换0次交换,N(n-1)/2交换

4、插入排序是稳定的排序算法

四、代码

#include <iostream>

using namespace std;

template <typename type>
void Exch(type& a, type& b)
{
	type temp = a;
	a = b;
	b = temp;
}

template <typename type>
void InsertSort(type data[], int length)
{
	int j, i;
	for (i = 1; i < length; i++)
	{
		//data[i] 默认有序,取出数组的下一个元素为新元素
		//在已经排序的序列中从后向前扫描,已经有序的范围是data[0...i-1]
		//如果新元素小于当前元素,当前元素向后移动
		//继续上一步骤,直到当前元素小于等于新元素
		int temp = data[i];
		for (j = i - 1; j >= 0 && data[j] > temp; j--)
			data[j + 1] = data[j];//当前元素向后移动
		//直到当前元素小于等于新元素,跳出for循环
		//将新元素放到该位置
		data[j + 1] = temp;
	}
}
template <typename type>
void PrintList(type data[], int length)
{
	for (int i = 0; i < length; i++)
		cout << data[i] << "\t";
}
int main()
{
	int a[] = { 1, 3, 2, 4, 5, 7, 6, 8, 0, 9 };
	InsertSort(a, 10);
	PrintList(a, 10);
	return 0;
}

python

#coding=gbk
'''
Created on 2015年5月12日

@author: Nicholas
'''

class Sort():
    def InsertSort(self,data):
        for i in range(1,len(data)):
            j=i-1
            temp = data[i]
            while(j>=0 and temp<data[j]):
                data[j+1] =data[j]
                j -= 1
            data[j+1] = temp
    def PrintData(self,data):
        for e in data:
            print(e)
if __name__ == '__main__':
    data=[1,0,9,2,3,8,6,7,4,5]
    s = Sort()
    s.InsertSort(data)
    s.PrintData(data)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值