初级排序——插入排序

插入排序:分为两部分:红色为已排好序的,空白的为仍未排序的。

每次的排序步骤从未排序中选出第一个让其依此与前方已排序的进行比较,看看应该处于什么位置,就把它插入进去,让其后已排序的以此向后移动一位。

第四个比第二个第三个大,但小于等于第一个,于是将第四个换到第二个位置,并将原先的第二三个依此向后移动一位。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=101; //定义数组下标常量
int main()
{
int n,a[maxn];
cin>>n; //输入进行排序的数的个数
for(int i=0;i<n;i++) //输入n个数
cin>>a[i];
for(int i=0;i<n;i++)
{
int v=a[i],j,k; //令v等于未排序的第一个数
for(j=i-1;j>=0;j--) //让v与其前方已排好序的依此进行比较
{
if(a[j]>v) a[j+1]=a[j]; //若符合条件,将符合条件的数依此后移一位
else break; //到此为止,不再进行比较
}
a[j+1]=v; //将v插入进去
for(k=0;k<n-1;k++) //将每一次的排序后的暂时结果进行输出,观察插入排序的每步结果
cout<<a[k]<<" ";
cout<<a[k]<<endl;
}
return 0;
}

插入排序的复杂度未O(n^2),复杂度比较高,不适应于一般排序,比较浪费时间,但是插入排序这种算法也是比较有意思的,你如果给的是一组降序的数,要对其进行升序排列,这是插入排序的最坏的情况,但是要是一组升序的数,对其进行升序排列,只需要n次即可。所以插入排序适用于处理相对有序的数据。

原文地址:https://www.cnblogs.com/sunjianzhao/p/11330673.html