插入排序之Python3實現和c++實現

插入排序(Insert sort)

1.排序思想

設有一組關鍵字{K1, K2,…, Kn};排序開始就認爲 K1 是一個有序序列;讓 K2 插入上述表長爲 1 的有序序列,使之成爲一個表長爲 2 的有序序列;然後讓 K3 插入上述表長爲 2 的有序序列,使之成爲一個表長爲 3 的有序序列;依次類推,最後讓 Kn 插入上述表長爲 n-1 的有序序列,得一個表長爲 n 的有序序列。

具體算法描述如下:

  1. 從第一個元素開始,該元素可以認爲已經被排序
  2. 取出下一個元素,在已經排序的元素序列中從後向前掃描
  3. 如果該元素(已排序)大於新元素,將該元素移到下一位置
  4. 重複步驟 3,直到找到已排序的元素小於或者等於新元素的位置
  5. 將新元素插入到該位置後
  6. 重複步驟 2~5

2.Python實現

##Insert sort
##python3
##Yanglin Tu
def insert_sort(unsort_list):
	length = len(unsort_list)
	for i in range(length-1):
		key = unsort_list[i+1]
		j = i 
		while unsort_list[j] > key and j >= 0:
			unsort_list[j+1] = unsort_list[j]
			j -= 1
		unsort_list[j+1] = key
	return unsort_list

def main():
	list_a = [20, 5, 7, 1, 66, 47, 5, 18]
	print(list_a)
	sort_list = insert_sort(list_a)
	print(sort_list)

if __name__ == '__main__':
	main()

3.C++實現

//Insert sort
//c++
//Yanglin Tu
#include <iostream>
using namespace std;

void insert_sort(int *arr, int length);

int main()
{
	int i;
	int list_a[] = {20, 5, 7, 1, 66, 47, 5, 18};
	int length = sizeof(list_a)/sizeof(int);
	for(i=0; i<length; i++)
		cout<<list_a[i]<<'\t';
	cout<<endl;
	insert_sort(list_a,length);
	for(i=0; i<length; i++)
		cout<<list_a[i]<<'\t';
	cout<<endl;
	return 0;
}
void insert_sort(int *arr,int length)
{
	int i,j;
	for(i=1; i<length; i++)
	{
		int key = arr[i];
		j = i-1;
		while(j>=0 && arr[j]>key)
		{
			arr[j+1] = arr[j];
			j -= 1;
		}
		arr[j+1] = key;
	}
}

4.性能分析

插入排序的平均時間複雜度爲O(n^2),空間複雜度爲O(1), 是個穩定的排序算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章