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

选择排序算法从难到易实现

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

难实现:

代码语言:javascript
复制
/*
编写一个程序,将一个整型数组中的数据从大到小排列,要求使用选择排序
*/

#include <iostream>
using namespace std;

//每次选择序列中的最小元素,让他它未排序的第一个元素交换
void selectSort(int data[],int len)
{
  
   int tmp;
   int i,j;
   int min;
   for(i=0;i<len-1;i++)
   {
       min=i;

       for(j=i+1;j<len;j++)
       {
           if(data[min]>=data[j])
           {
               min=j;//记录最小元素的位置
           }
       }

       if(min!=i)
       {
           tmp=data[min];
           data[min]=data[i];
           data[i]=tmp;
       }

   }
     
    
}

int main()
{
    int data[9]={0,3,1,2,4,6,6,10,5};
    selectSort( 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::min_element 发现最小元素,然后 iter_swap 将它交换到相应位置

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

void selection_sort(FwdIt first, FwdIt last, Compare cmp=Compare{})
{
    for (auto it=first; it != last; ++it)
    {
        auto const selection = std::min_element(it,last,cmp);
        std::iter_swap(selection,it);
        assert(std::is_sorted(first,std::next(it),cmp));
    }
    //[first,it) 中的元素已经排好序
}

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

    for(int i=0;i<data.size();i++)
        cout<<data[i]<<endl;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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