问题描述:
输入:n个数的一个序列<a1,a2,...,an>。
输出:输入序列的一个排列<a1',a2',...an'>,满足a1'≤a2'≤···≤an'。
伪代码:
INSERTION-SORT(A)
for j = 2 to A.length
key = A[j]
//Insert A[j] into the sorted sequence A[1..j-1].
i = j - 1
while i > 0 and A[i] > key
A[i+1] = A[i]
i = i - 1
A[i+1] = key
C++代码实现:
#include <iostream>
using namespace std;
//插入排序算法,时间复杂度O(n^2),即运行1+2+...+(n-1)=((n-1)*n)/2次
void insertion_sort( int arr[], int len )
{
for(int i = 1; i < len; ++i)
{
int key = arr[i];
int j = i - 1;
while( (key < arr[j]) && (j>=0) )
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;
}
}
int main()
{
int n;
cin>>n;
int a[n];
for(int i = 0;i < n; ++i){
cin>>a[i];
}
insertion_sort(a,n);
for(int i = 0; i < n; ++i){
cout<<a[i]<<" ";
}
return 0;
}