对一组数据进行插入排序的方法是:
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))