前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >插入排序算法从难到易实现

插入排序算法从难到易实现

作者头像
用户9831583
发布2022-06-16 14:19:10
1390
发布2022-06-16 14:19:10
举报
文章被收录于专栏:码出名企路

难实现:

代码语言:javascript
复制
/*
编写一个程序,将一个整型数组中的数据从大到小排列,要求使用直接插入排序
*/
#include <iostream>
using namespace std;

void insertSort(int data[],int len)
{
    int i,j,tmp;

    for(i=1;i<len;i++)
    {
        tmp=data[i];

        j=i-1;
        while(j>=0 && tmp>data[j])//从大到小排序
        {
            data[j+1]=data[j];//循环右移,直到找到data[i]应该放置的位置
            j--;
        }

        data[j+1]=tmp;//将元素tmp插入指定位置
    }

     
    
}

int main()
{
    int data[9]={0,3,1,2,4,6,6,10,5};
    insertSort( data,9);
    for(int i=0;i<9;i++)
        cout<<data[i]<<endl;

    return 0;
}

易实现:

代码语言:javascript
复制
#include <algorithm>
#include <cassert>
#include <functional>
#include <iterator>
#include <iostream>
using namespace std;

//std::upper_bound 找到当前元素应该在的位置
//std::rotate 将当前元素放到正确的位置

template <class Fd, class Compare=std::less<Fd>>

void insertion_sort(Fd first, Fd last, Compare cmp=Compare{})
{
    for (auto it=first;it!=last;it++)
    {
        auto const insertion=std::upper_bound(first,it,*it,cmp);
        std::rotate(insertion,it,std::next(it));
        assert(std::is_sorted(first,std::next(it),cmp));
    }
}

int main()
{
    std::vector<int> data={0,3,1,2,4,6,6,10,5};
    
    insertion_sort(data.begin(),data.end(),std::less<int>());

    for(int i=0;i<data.size();i++)
        cout<<data[i]<<endl;
    return 0;
}

博主:菜鸟程序员

初衷:学习资料,程序设计,视觉算法,求职经验,工作心得

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出名企路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档