您的位置:首页 > 其它

直接插入排序

2018-03-18 09:43 141 查看

【分类】

    插入类排序

【基本思想】

    通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

【工作原理】

    工作原理类似于抓扑克排序
    步骤:

从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置后
重复步骤2~5

【特点】

          数据结构:数组
     稳定性:稳定

【过程】

 初始关键字:  『 6,5,3,1,8,7,2,4 』 第一趟排序:  『 6 』,5,3,1,8,7,2,4 第二趟排序:   65,3,1,8,7,2,4                      『 6,』,3,1,8,7,2,4第三趟排序:   5,63,1,8,7,2,4                        5,『6,3』,1,8,7,2,4                        『5,36,1,8,7,2,4第四趟排序:   3,5,6,1,8,7,2,4                        3,『5,1』,6,8,7,2,4                      『 3,1』,5 ,6,8,7,2,4第五趟排序:   1,3,5 ,6,8,7,2,4                       1,3,5,『6,8』,7,2,4 第六趟排序:   1,3,5 ,6 ,8,7,2,4                       1,3,5,6,『8,7』,2,4                        1,3,5,『6,7』,8,2,4 第七趟排序:   1,3,5 ,6 ,7,8,2,4                       1,3,5,67,『8,2』,4
                       1,3,5,67
e3a7
2』,8,4
                       1,3,5,62』,7,8,4
                       1,3『5,2』,67,8,4                       132,5,6,7,8,4                       『1,2』,3,567,8,4第八趟排序:   1,2,3,5,6,7,8,4
                       1,2,3,5,67,8
                       1,2,3,5,674』,8
                       1,2,3,5,64』,7,8                       1,2,3『5,4』,67,8                       1,2,34,5,6,7,8 结果:        『  1,2,3,4,5,6,7,8  』

  

        

                  排序过程                                                         宏观过程

【复杂度与辅助空间】

 最差时间复杂度:O(n^2)    (输入情况是降序排列时) 最优时间复杂度:O(n)    (输入情况是升序排列时) 平均时间复杂度:O(n^2) 所需辅助空间:O(1) 

【源程序】

//A:输入数组,len:数组长度
void insert_sort(int A[],int len)
{
int temp;
int i,j;

for(i=1;i<len;i++)
{
j=i-1;//右手抓到一扑克
temp=A[i];//拿在左手上的牌总是排序好的
while(j>=0&&A[j]>temp)//查找到要插入的位置
{
A[j+1]=A[j];//如果该手牌比抓到的牌大,就将其右移
j--;
}
if(j!=i-1)
A[j+1]=temp;//直到该手牌比抓到的牌小(或相等),将抓到的牌插入到该手牌右边
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: