插入排序

      直接插入排序即在有序数列的基础上进行排序算法。对一个初始数列排序,第一个元素默认为一个只有一个元素有序数列,然后依次增加元素进行排序组成有序数列,即从数列中的第二个元素进行排序。利用一个空间存储待排序的末尾元素,依次比较已有序数列中元素与末尾元素大小,确定插入位置(在比较的同时完成数列中的元素的移动),将末尾元素插入位置,完成排序。

#include<iostream>
using namespace std;
int main()
{
    int a[7] = { 135, 45, 144, 474, 74, 1, 5 };
    for (int i = 0; i <=6; i++)
    {
        cout << "a["<<i<<"]"<<a[i]<<endl;

    }

    // 直接插入排序
    int j;
    for (int i = 1; i < 7; ++i)
    {
        int temp = a[i];
        j = i - 1;
        while (temp<a[j] &&j>=0)
        {
            a[j+1] = a[j];
            --j;
        }
        a[j+1] = temp;
    
    }
    cout << "排序后。。。。。" << endl;
    for (int i = 0; i <= 6; i++)
    {
        cout << "a[" << i << "]" << a[i] << endl;

    }
    system("pause");
    return 0;
}

 

      折半插入排序原理同直接插入排序,只是在寻找确定插入位置时方法不同,运用折半的方法确定插入位置,在确定查找方法在一定条件下会比直接插入排序算法更高效,应该是直接插入排序的改良版本。(由于运用Low和High来确定整个数列,所以Low和High的值不能定为0)

#include<iostream>
using namespace std;
int main()
{
    int a[7] = { 135, 45, 144, 474, 74, 1, 5 };
    for (int i = 0; i <= 6; i++)
    {
        cout << "a[" << i << "]" << a[i] << endl;

    }

    

    // 折半插入算法排序
    int  Low, High,Medium,temp,p;
    for (int i = 2; i < 8; ++i)
    {
        Low = 1;
        High = i-1;
        temp = a[i-1];
        while (Low <= High)
        {

            Medium = (High + Low) / 2;
            if (temp < a[Medium-1])
            {
                High = Medium - 1;


            }
            if (temp > a[Medium-1])
            {
                Low = Medium + 1;

            }
            
        }
        for (int j=i-1; j >High; --j)
        {

            a[j] = a[j-1];

        }
        a[High] = temp;
    }


    

    cout << "排序后。。。。。" << endl;
    for (int i = 0; i <= 6; i++)
    {
        cout << "a[" << i << "]" << a[i] << endl;

    } 
    system("pause");
    return 0;
}

 

 

 

插入排序算法更适合对已有序数列添加元素后进行排序。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值