简介
插入排序(英语:Insertion sort)是一种简单直观的排序算法。它的工作原理为将待排列元素划分为“已排序”和“未排序”两部分,每次从“未排序的”元素中选择一个插入到“已排序的”元素中的正确位置。
一个与插入排序相同的操作是打扑克牌时,从牌桌上抓一张牌,按牌面大小插到手牌后,再抓下一张牌。
稳定性:
插入排序是一种稳定的排序算法。
时间复杂度:
插入排序的最优时间复杂度为O(n) ,在数列几乎有序时效率很高。插入排序的最坏时间复杂度和平均时间复杂度都为O(n^2)。
插入排序的算法如下:(伪代码)
insertsort(A,N)
for i=2 to N
key = A[i];
j = i-1;
while(j>0&&A[j]>key)
A[j+1]=A[j];
j--;
A[j+1]=key;
具体代码如下:
#include<iostream>
using namespace std;
int main() {
int a[11],key,i,j;
for(i=1; i<=10; i++)
cin>>a[i];
for(j=2; j<=10; j++) {
key=a[j]; //保存要进行操作的数
i=j-1; //对已排序的数组进行遍历
/*遍历“已排序”部分,并与未排序的数进行比较,
找到合适的位置进行插入 */
while(i>0&&a[i]>key)
{
a[i+1]=a[i];
i--;
}
//将未排序的数插入对应的位置
a[i+1]=key;
}
for(int i=1; i<=10; i++)
cout<<a[i]<<" ";
return 0;
}