“直接插入排序”C++/python實現
阿新 • • 發佈:2018-12-13
對一組資料進行插入排序的方法是:
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))