【演算法】插入排序法
阿新 • • 發佈:2019-02-13
一、介紹
1.插入排序是簡單排序演算法中的一種,它主要適用於包括向量和列表在內的任何序列結構
二、思路
1.將數列分為有序字首和無序字尾兩部分,將字尾首元素不斷往字首中移動,直至字尾無元素
2.存在一個標識位,標識有序字首和無序字尾,即s[0,r)為有序字首,s[r,n-1]為無序字尾
3.將元素s[r]往前插入時,需要注意元素的位置移動,此時是在s[0,r]區間進行插入,從後往前比較,若後者比前者小,則交換兩者位置,直至到達首位
三、程式
1.程式
#include "stdafx.h" #include<iostream> using namespace std; void InsertSort(int A[],int n) { for(int r = 1; r < n; r++) //r為標識位,標識排序部分和未排序部分 { for(int i = r - 1; i >= 0; i--) { if (A[i+1] < A[i]) //將一個元素插入前側排序部分 { int temp = A[i+1]; A[i+1] = A[i]; A[i] = temp; } } } }
2.測試用例
void TestInsertSort() { int A[] = {2,3,7,8,4,9,10,23,45,13,5,1}; int n = 12; std ::cout << "排序前的陣列:" ; for (int i = 0 ;i < n ; i++) { std ::cout << A[i]<<" " ; } InsertSort(A,n); std ::cout << "排序後的陣列:" ; for (int i = 0 ;i < n ; i++) { std ::cout << A[i]<<" " ; } }
3.輸出
四、複雜度
O(n^2)