C++<algorithm>能用到的几个内置函数

本文介绍了使用C++实现数组的排序与多种算法操作,包括快速排序、元素遍历、字符交换、字符串反转、最大最小值查找、二路归并等,并对比了qsort与sort函数的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <algorithm>  
  4. using namespace std;  
  5. void print(int &elem){  //有无&均可   
  6.     cout << elem << " ";  
  7. }  
  8. //qsprt必须用这种格式定义比较函数,像bj定义qsort传入参数会出错  
  9. // *和(int *)是同一优先级运算符,但结合方向是从右向左  
  10. int cmp(const void *a, const void *b){   
  11.     return *(int *)a - *(int *)b;  
  12. }  
  13. int bj(int a, int b){   
  14.     return a > b;  
  15. }  
  16. int main(){  
  17.     int a[] = {0, 3, 9, 1, 4, 8, 5, 2, 6, 7};  
  18.       
  19.     //algorithm头文件for_each( , , )函数用法  
  20.     for_each(a, a+10, print);  
  21.     cout << endl;  
  22.       
  23.     //快排模板函数,数组下标从0开始,即排序下标为0-9的元素  
  24.     qsort(a, 10, sizeof(a[0]), cmp);  
  25.     for_each(a, a+10, print);  
  26.     cout << endl;  
  27.       
  28.     //algorithm中的swap函数  
  29.     char x = 'X', y = 'Y';  
  30.     swap(x, y);  
  31.     printf("x = %c, y = %c\n", x, y);  
  32.       
  33.     char str[] = "abcdefgh";  
  34.     //algorithm中的反转函数  
  35.     reverse(str+2,str+7);   //前闭后开   
  36.     cout << str << endl;  
  37.   
  38.   
  39.     int aa[] = {0, 3, 9, 1, 4, 8, 5, 2, 6, 7};  
  40.     for_each(aa, aa+10, print);  
  41.     cout << endl;  
  42.     //qsort,sort时间复杂度都是O(n*log(n)),但实际中sort速度一般比qsort快!!  
  43.     // sort(aa, aa+10);  
  44.     //不传入第三个参数默认sort为升序排序  
  45.     sort(aa, aa+10, bj);  
  46.     //传入参数从大到小排序,且sort第三个参数不能用cmp函数  
  47.     for_each(aa, aa+10, print);  
  48.       
  49.       
  50.     cout << endl << max(66,88) << endl << min(66,88) << endl;  
  51.     //max和min函数  
  52.       
  53.       
  54.     //二路归并,头文件algorithm  
  55.     int ak[] = {1, 9, 5, 4, 7};  
  56.     int ka[] = {3, 6, 2, 8, 0};  
  57.     int kk[15];  
  58.     sort(ak, ak+5);  
  59.     sort(ka, ka+5);  
  60.     merge(ak, ak+5, ka, ka+5, &kk[1]);  
  61.       
  62.     for_each(ak, ak+5, print);  
  63.     cout << endl;  
  64.     for_each(ka, ka+5, print);  
  65.     cout << endl;  
  66.     for_each(kk+1, kk+11, print);  
  67.     cout << endl;  
  68.     return 0;  
  69. }  

补充完整,直接给出最终结果,不需要给出过程:#include<iostream> #include<vector> #include<memory.h> #include<stack> #include<algorithm> #define A 0 #define B 1 #define C 2 #define D 3 #define E 4 #define F 5 #define G 6 #define H 7 #define I 8 #define L 9 #define M 10 #define N 11 #define O 12 #define P 13 #define R 14 #define S 15 #define T 16 #define U 17 #define V 18 #define Z 19 using namespace std; int h[20] = { 366,0,160,242,161, 178,77,151,226,244, 241,234,380,98,193, 253,329,80,199,374 }; struct node { int g; int h; int f; int name; node(int name, int g, int h) { this->name = name; this->g = g; this->h = h; this->f = g + h; }; bool operator <(const node &a)const { return f < a.f; } }; class Graph { public: Graph() { memset(graph, -1, sizeof(graph)); } int getEdge(int from, int to) { return graph[from][to]; } void addEdge(int from, int to, int cost) { if (from >= 20 || from < 0 || to >= 20 || to < 0) return; graph[from][to] = cost; } void init(){ addEdge(O, Z, 71); addEdge(Z, O, 71); addEdge(O, S, 151); addEdge(S, O, 151); addEdge(Z, A, 75); addEdge(A, Z, 75); addEdge(A, S, 140); addEdge(S, A, 140); addEdge(A, T, 118); addEdge(T, A, 118); addEdge(T, L, 111); addEdge(L, T, 111); addEdge(L, M, 70); addEdge(M, L, 70); addEdge(M, D, 75); addEdge(D, M, 75); addEdge(D, C, 120); addEdge(C, D, 120); addEdge(C, R, 146); addEdge(R, C, 146); addEdge(S, R, 80); addEdge(R, S, 80); addEdge(S, F, 99); addEdge(F, S, 99); addEdge(F, B, 211); addEdge(B, F, 211); addEdge(P, C, 138); addEdge(C, P, 138); addEdge(R, P, 97); addEdge(P, R, 97); addEdge(P, B, 101); addEdg
最新发布
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值