• C++sort函数使用总结


    头文件:algorithm

    对于(整数/字符)数组进行比較时,可直接通过sort(a,a+n)或sort(a.begin(),a.end())进行排序,默认升序排列,须要高速实现降序时,有三种方案

    1.反转升序数组(reserve函数)

    2.反向迭代sort(a.rend(),a.rbegin())

    3.借助C++库函数,greater<类型>()降序       less<类型>()升序     头文件:functional


    当对结构体进行排序时,须要自己写比較函数,曾了解qsort的都知道,C中的qsort排序函数写起来比較麻烦,由于传入的类型是const void * ,函数内部还须要进行强制转换,而sort仅仅需正常传入数据进行比較就可以。

    eg:

    #include<iostream>
    #include<cstdlib>
    #include<ctime>
    #include<algorithm>
    #include<functional>
    #include<string>
    using namespace std;
    
    typedef struct node{
    	int x,y,z;
    }node;
    node s[10];
    int cmp(node a,node b)
    {
    if(a.x!=b.x)return a.x<b.x;
    else if(a.y!=b.y)return a.y<b.y;
    else return a.z<b.z;
    }
    int main()
    {
    	srand((unsigned)time(NULL));
    	for(int i=0;i<10;i++)
    	{
    		s[i].x=rand()%5;
    		s[i].y=rand()%10;
    		s[i].z=rand()%20;
    	}
    	for(i=0;i<10;i++)
    	{
    		cout<<s[i].x<<"   "<<s[i].y<<"   "<<s[i].z<<"
    ";
    	}
    	sort(s,s+10,cmp);
    	cout<<"
    
    ";
    	for(i=0;i<10;i++)
    	{
    		cout<<s[i].x<<"   "<<s[i].y<<"   "<<s[i].z<<"
    ";
    	}
    	return 0;
    }
    这里进行了结构体的多级排序。

    当对字符串数组进行排序时,能够利用C中的strcmp返回自己定义函数结果。

    对于String,其能够如同数组一样使用,但不能利用C字符串函数,可使用C++标准库字符串函数。

    除了,结构体,字符串数组,sort函数都能够利用C++标准函数实现高速排序,包含pair,vector等类型,未来掌握的更加完好了再继续本文总结。

    补:

    当我们从0到n-1向数组中输入数据时,排序时sort(a,a+n),当我们须要对当中的部分排序时,仅仅须要sort(a+x,a+n),x>=0(0时是全排序)排序后的结果将以a+x为起点存入。

    当我们从1到n向数组中输入数据时,排序时sort(a+1,a+n+1),当我们须要对当中的部分排序时,仅仅须要sort(a+x,a+n+1),x>=1,排序后的结果将以a+x为起点存入。

  • 相关阅读:
    LeetCode:Remove Nth Node From End of List
    LeetCode:Swap Nodes in Pairs
    LeetCode:Merge Two Sorted Lists
    LeetCode:Maximum Subarray
    LeetCode:Linked List Cycle
    LeetCode:Search Insert Position
    LeetCode:Roman to Integer
    算法程序设计题语言类笔记
    我的小游戏之2048
    LeetCode:Best Time to Buy and Sell Stock II
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4279729.html
Copyright © 2020-2023  润新知