排序算法之插入排序

时间:2016/5/4(day4)

目标算法:插入排序

应用范围:排序

算法思路:从数组要排序的部分开始第二个值开始依次与前面的数比较,如果比前面的数小的话则交换位置,重复此过程直到数组有序。

算法实现:从Array[l-1]开始循环,设置一个key保存当前值,然后依次与前面的值进行比较或交换,最后再将key值还原到插入的位置。

时间复杂度:O(n^2)

oj测试:hdu 2020

测试结果:AC

算法代码:

#include<cstdio>
#include<iostream>
using namespace std;

const int maxn = 1005;
void insertsort(int l,int r,int Array[])
{
    for(int j=l+1;j<=r;j++)
    {
        int key = Array[j];
        int i = j - 1;
        while(i > l-1 && Array[i] > key)
        {
            Array[i+1] = Array[i];
            i--;
        }
        Array[i+1] = key;
    }
}

int main()
{
    int Array[maxn];
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++) scanf("%d",&Array[i]);
        insertsort(0,n-1,Array);
        for(int i=0;i<n;i++) printf("%d ",Array[i]);
        printf("\n");
    }
}


你可能感兴趣的:(插入排序,排序算法)