Insert sort

来源:互联网 发布:前海开源人工智能 编辑:程序博客网 时间:2024/06/17 23:29

插入排序(Insertion Sort)

一.直接插入排序

1.简单结构

a.算法

算法描述:

图例:

b.伪代码

c.代码实现(C语言)

  • 非递归
void Acending_InsertionSort(int A[],int n){    int j;    for(j=1;j<n;j++)    {        int key=A[j];        int i=j-1;        while(i>=0&&A[i]>key)//若为降序Descending,将其改为A[i]<key        {            A[i+1]=A[i];            i--;        }        A[i+1]=key;    }}
  • 递归
void Acending_InsertionSort(int A[],int n){    if(n>0)    {        InsertionSort(A,n-1);        int i=n-2;        int key=A[n-1];        while(i>=0&&A[i]>key)//若为降序Descending,将其改为A[i]<key        {            A[i+1]=A[i];            i--;        }        A[i+1]=key;    }

d.算法分析

  • 运行时间分析:时间开销与输入序列的规模(即待排序数组的长度)及数组的已排序程度有关

  • 时间复杂度:

    O(n2)

  • 插入排序是原地排序(sort in place)和稳定排序(stable sort)

2.有序表