常用排序算法 sort() random_shuffle() merge() reverse()

简介: 常用排序算法 sort() random_shuffle() merge() reverse()

导航


1.sort()函数使用 //排序从小到大或者从大到小

2.random_shuffle() //指定范围内数据随机进行排序

3.merge() //将两个有序容器中的数据存入到另一个容器中

4.reverse() //将容器中的数据反转


——————————————————————————————————————


1.sort()函数使用


原型:sort(iterator beg,iterator end,_func)

iterator beg:迭代器初始位置

iterator end:迭代器末尾位置

_func():可以使用内建函数对象


两种用法

第一种直接调用: (按照从小到大排序)


#include <iostream>
using namespace std;
#include <vector>
#include <algorithm> 
//给for_each遍历提供函数,可以见前面遍历算法
void print(int val)
{
  cout<<val<<" ";   //输出形式可以自己定 
}
void test()
{
  vector<int> v;
  v.push_back(1);
  v.push_back(5);
  v.push_back(4);
  v.push_back(9);
  //从小到大排序
  //*******************************
  sort(v.begin(),v.end());   //只需要放初始位置及最后位置的迭代器 
  //*******************************
  for_each(v.begin(),v.end(),print);
}
int main()
{
  test();
  return 0;
}


第二种使用内建函数: greater< int>()

注意使用之前:要加头文件#include < functional>


#include <iostream>
using namespace std;
#include <vector>
#include <algorithm> 
#include <functional>   //使用内建函数要加functional头文件 
void print(int val)
{
  cout<<val<<" ";   //输出形式可以自己定 
}
void test()
{
  vector<int> v;
  v.push_back(1);
  v.push_back(5);
  v.push_back(4);
  v.push_back(9);
  //*******************************
  //从大到小排序
  sort(v.begin(),v.end(),greater<int>());   //添加greater<int>(),在前面STL内建函数中有解释 ,是大于的意思 
  //*******************************
  for_each(v.begin(),v.end(),print);
}
int main()
{
  test();
  return 0;
}

———————————————————————————————


2.random_shuffle()函数使用


原型:random_shuffle(iterator beg,iterator end)

iterator beg:迭代器初始位置

iterator end:迭代器末尾位置


注意为了每次结果都不相同要加随机种子srand((unsigned int)time(NULL));


#include <iostream>
using namespace std;
#include <vector>
#include <algorithm> 
#include <ctime>      //配置随机种子需要 
void print(int val)
{
  cout<<val<<" ";   //输出形式可以自己定 
}
void test()
{
  srand((unsigned int)time(NULL));   //创建随机种子需要头文件#include < ctime>
  vector<int> v;
  for(int i=0;i<10;i++)
  v.push_back(i);
  //*******************************
  random_shuffle(v.begin(),v.end());    //只需要放入范围中的迭代器即可打乱 
  //*******************************
  for_each(v.begin(),v.end(),print);
}
int main()
{
  test();
  return 0;
}


——————————————————————————————————————


3.merge()函数使用


原型:merge(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator beg3)

iterator beg1:迭代器1初始位置

iterator end1:迭代器1末尾位置

iterator beg2:迭代器2初始位置

iterator end2:迭代器2末尾位置

iterator beg3:目标容器的迭代器3初始位置


注意点:


merge()在使用前要分配内存空间resize()

两个容器中必须有有序的数据,存入另一个容器中也是有序的


#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
void print(int val)
{
  cout<<val<<" ";
}
void test()
{
  //创建两个容器 
  vector<int> v1; 
  vector<int> v2;
  for(int i=0,j=1;i<5;i++,j=j+2)
  {
  v1.push_back(i);
  v2.push_back(j);
  }
  vector<int> v3;
  //先分配容量,再存入
  v3.resize(v1.size()+v2.size()); 
  //将v1,v2两个有序容器中数放入到v3中 
  merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin()); 
  //用for_each算法遍历
  for_each(v3.begin(),v3.end(),print);
}
int main()
{
  test();
  return 0;
}



——————————————————————————————————————


4.reverse() 函数使用


原型:reverse(iterator beg,iterator end)

iterator beg:迭代器初始位置

iterator end:迭代器末尾位置


#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
void print(int val)
{
  cout<<val<<" ";
}
void test()
{
  //创建容器 
  vector<int> v1;
  for(int i=0;i<5;i++)
  v1.push_back(i);
  cout<<"反转前:"<<endl;
  for_each(v1.begin(),v1.end(),print);
  cout<<endl;
  reverse(v1.begin(),v1.end());  //放入迭代器初始及最后的位置 
  cout<<"反转后:"<<endl;
  for_each(v1.begin(),v1.end(),print);
}
int main()
{
  test();
  return 0;
}


运行结果:


相关文章
|
3月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
40 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
6月前
|
搜索推荐 算法 Java
sort-05-insert sort 插入排序算法详解
这是一个关于排序算法的系列文章总结,包括冒泡排序、快速排序、选择排序、堆排序、插入排序等10种排序算法的详细讲解和Java实现。插入排序是一种简单直观的排序算法,通过构建有序序列并逐个插入新元素来排序。提供的Java代码展示了插入排序的实现过程,并附有测试示例。所有算法已开源在GitHub项目[https://github.com/houbb/sort](https://github.com/houbb/sort)中。
|
6月前
|
人工智能 搜索推荐 算法
sort-04-heap sort 堆排序算法详解
这是一个关于排序算法的系列文章摘要,包括了10篇关于不同排序算法的链接,如冒泡排序、快速排序、选择排序、堆排序等。堆排序是一种基于比较的排序算法,利用了近似完全二叉树的结构并满足最大堆或最小堆的性质。最大堆中,每个节点的值都大于或等于其子节点。文章详细解释了最大堆的概念、节点访问方式以及堆的操作,包括堆调整和堆排序的过程,并通过图解展示了堆排序的具体步骤。此外,还提供了一个Java实现的堆排序代码示例。整个排序系列来源于一个开源项目,读者可以通过链接查看完整内容。
sort-04-heap sort 堆排序算法详解
|
6月前
|
搜索推荐 算法 Java
sort-01-bubble sort 冒泡排序算法详解
这是一个关于排序算法的系列文章摘要。作者整理了10种不同的排序算法,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序和大文件外部排序。文章详细介绍了冒泡排序的工作原理、流程,并提供了代码实现,强调了在实现中考虑的改进点,如统一接口、实用性增强和日志输出。此外,还提供了一个排序接口和工具类以方便使用,并通过测试代码和日志展示了排序过程。整个系列旨在帮助读者理解和掌握排序算法。相关代码已开源在GitHub。
|
算法 开发者 索引
【C++11算法】random_shuffle和shuffle
【C++11算法】random_shuffle和shuffle
311 0
|
6月前
|
搜索推荐 算法 Java
sort-06-shell sort 希尔排序算法详解
这是一个关于排序算法的系列文章摘要。文章汇总了各种排序算法,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序以及大文件外部排序。特别地,希尔排序是一种改进的插入排序,通过使用不同的步长对元素进行分组排序,以提高效率。算法最终以较小的步长进行排序,接近线性时间复杂度。文章还提供了Java代码实现,并举例说明了希尔排序的过程。所有内容可在开源项目[https://github.com/houbb/sort](https://github.com/houbb/sort)中找到。
|
6月前
|
搜索推荐 C++ 索引
常闲排序算法-merge讲解
常闲排序算法-merge讲解
22 1
|
6月前
|
存储 算法 JavaScript
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(二)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
141 0
|
6月前
|
算法 搜索推荐 程序员
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(一)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
113 0
|
6月前
|
搜索推荐 C++ 索引
常闲排序算法merge讲解
常闲排序算法merge讲解
56 0
下一篇
无影云桌面