码迷,mamicode.com
首页 > 编程语言 > 详细

直接插入排序算法的原理与实现

时间:2015-08-18 11:55:55      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:插入排序   算法   

BS(Begin Status)

OP:{}
UP:{a 01  ,a 02  , … ,a 0i  ,a 0i+1  , … ,a 0n?1  }

STEP1. 将数列分为OP(已有序)和UP(无序)两部分

OP:{a 11  }
UP:{a 12  , … ,a 1i  ,a 1i+1  , … ,a 1n?1  }

STEP2. 从UP中取第一个元素放到OP中适当位置

具体方法是: 从 OP 的最后一个位置起向前进行循环比较
OP:{a  21  ,a  22  }
UP:{a  23  , … ,a  2i  ,a 2i+1    , … ,a  2n?1  }

STEP3. 重复 STEP2, 直至 UP 变成为空序列(即数列元素个数为0)

OP:{a  x1  ,…,a  xi?1  }
UP:{a  xi  ,a xi+1    , … ,a  xn?1  }

ES(End Status)

OP:{a  n1  ,a  n2  ,a  n3  , … ,a  ni  ,a ni+1    , … ,a  nn?1  }
UP:{}


代码实现

//C++代码实现
void InsertSort(int arr,int arrSize)
{
    for(int i = 1;i < arrSize; i++)
    {
        int target=arr[i],j=i;
        while(j > 0 && target < arr[j-1])
        {
            arr[--j+1]=a[j];
        }
        arr[j]=target;
    }
}

拓展–折半插入排序(针对于数列个数比较大)

改进的关键措施是 在OP上 从 一般的循环比较 改成 二分法折半查找

版权声明:本文为博主原创文章,未经博主允许不得转载。

直接插入排序算法的原理与实现

标签:插入排序   算法   

原文地址:http://blog.csdn.net/liudglink/article/details/47749117

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!