C++ STL之 #include <algorithm>头文件

在C++中头文件algorithm中包括一些常用的方法,如下所示:

<1> sort函数是应用非常广泛的方法,其内部实现是快速排序;

其有两种模式:默认模式和自定义模式

(1)默认模式,默认升序

函数原型 void sort (RandomAccessIterator first, RandomAccessIterator last);

#include <stdio.h>
#include <algorithm>
using namespace std;
int main ()
{
  //定义一个大小为10的数组
  int arr[10] = {3, 5, 8, 2, 0, 9, 4, 7, 1, 6};
  //对数组前5个元素进行排序
  sort(arr, arr+5);
  for(int i=0; i < 10; i++)
  {
      printf("%d ", arr[i]);
  }
  return 0;
}
执行结果:0 2 3 5 8 9 4 7 1 6 

(2)自定义模式

函数原型 void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

comp 为排序规则

单关键字排序:

#include <stdio.h>
#include <algorithm>
using namespace std;
bool comp(int x, int y)
{
    // 按升序进行排序
    return x < y;
    // 按降序进行排序
    //return x > y;
}
int main ()
{
  //定义一个大小为10的数组
  int arr[10] = {3, 5, 8, 2, 0, 9, 4, 7, 1, 6};
  //对数组前5个元素进行排序
  sort(arr, arr+5, comp);
  for(int i=0; i < 10; i++)
  {
      printf("%d ", arr[i]);
  }
  return 0;
}
执行结果:0 2 3 5 8 9 4 7 1 6 

多关键字排序:

#include <iostream>
#include <algorithm>
using namespace std;
struct grade{
    int chinese;
    int math;
    int english; 
    
};
bool comp(grade x, grade y)
{
    if((x.chinese + x.math + x.english) != (y.chinese + y.math + y.english))
    {
        return (x.chinese + x.math + x.english) > (y.chinese + y.math + y.english);
    }
    else
    {
        if(x.chinese != y.chinese)
        {
            return x.chinese > y.chinese;
        }
        else
        {
            if(x.math != y.math)
            {
                return x.math > y.math;
            }
            else
            {
                return x.english > y.english;
            }
        }
    }
}
int main ()
{
  grade gd[5] = {{97, 93, 87}, {94, 97, 95}, {97, 95, 100}, {102, 97, 98}, {98, 73, 93}};
  sort(gd, gd+5, comp);
  cout<<"语文"<<"  "<<"数学"<<"  "<<"英语"<<"  "<<"总分"<<endl;
  for(int i=0; i < 5; i++)
  {
      cout<<gd[i].chinese<<"    "<<gd[i].math<<"    "<<gd[i].english<<"    "<<gd[i].chinese+gd[i].math+gd[i].english<<endl;
  }
  return 0;
}
执行结果:
语文  数学  英语  总分
102    97    98    297
97    95    100    292
94    97    95    286
97    93    87    277
98    73    93    264

 

posted on 2020-06-02 14:44  天池怪侠  阅读(569)  评论(0编辑  收藏  举报

导航