1. 程式人生 > >“直接插入排序”C++/python實現

“直接插入排序”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, -1):
			if list[j] > temp:
				list[j + 1]  = list[j]
			else:
				break
		list[j + 1]  = temp
	return list
	
a = [1,4,5,7,3,2,6,3,9]
print insert_sort(a,len(a))