zoukankan      html  css  js  c++  java
  • sort()的使用

    1 int i = rand()%100;//i的取值范围就是从0到99
    2 float f = i/100.0;//成功了
    1 int a[]={33,61,12,19,14,71,78,59};
    2 vector<int>aa(a,a+8);
    3 sort(aa.begin(),aa.end());
     1 //函数指针传递
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<vector>
     5 using namespace std;
     6 int bitSum(int a);
     7 bool lessThanBitSum(int a,int b)
     8 {
     9     return bitSum(a)<bitSum(b);
    10 }
    11 int main()
    12 {
    13     int a[]={33,61,12,19,14,71,78,59};
    14     vector<int>aa(a,a+8);
    15     sort(aa.begin(),aa.end(),lessThanBitSum);
    16     for(int i=0;i<aa.size();++i)
    17         cout<<aa[i]<<" ";
    18     cout<<"\n";
    19 }
    20 int bitSum(int a)
    21 {
    22     int sum=0;
    23     for(int x=a;x;x/=10)//x是表达式,为真就继续循环,x/=10是每次循环后都会执行,x=x/10
    24         sum+=x%10;
    25     return sum;
    26     
    27 }

    最近算法作业经常需要排序。偶是一个很懒的人,于是一直用C++的sort进行排序~~~不少同志对此心存疑虑,所以今天就写一写sort的用法。
    声明:此用法是从某大牛的程序中看到的,其实偶只是拿来用,不知所以然,飘走~~~~~

    MSDN中的定义:

    template<class RanIt>
    void sort(RanIt first, RanIt last); //--> 1)
    template<class RanIt, class Pred>
    void sort(RanIt first, RanIt last, Pred pr); //--> 2)


    头文件:
    #include <algorithm>
    using namespace std;

    1.默认的sort函数是按升序排。对应于1)
    sort(a,a+n);   //两个参数分别为待排序数组的首地址和尾地址
    2.可以自己写一个cmp函数,按特定意图进行排序。对应于2)
    例如:
    int cmp( const int &a, const int &b ){
        if( a > b )
           return 1;
        else
           return 0;
    }
    sort(a,a+n,cmp);
    是对数组a降序排序
    又如:
    int cmp( const POINT &a, const POINT &b ){
        if( a.x < b.x )
           return 1;
        else
           if( a.x == b.x ){
              if( a.y < b.y )
                 return 1;
              else
                 return 0;
            }
           else
              return 0;
    }
    sort(a,a+n,cmp);
    是先按x升序排序,若x值相等则按y升序排



    与此类似的还有C中的qsort,以下同附上qsort的使用方法:

    #include <stdlib.h>

             格式 qsort(array_name,data_number,sizeof(data_type),compare_function_name)       (void*)bsearch (pointer_to_key_word,array_name,find_number,

    sizeof(data_type),compare_function_name)

             e.g.

             int Cmp(const void*a,const void *b)

    {

                      int*pa=(int*)a,*pb=(int*)b;

                      if(*pa>*pb) return 1;

                 else if (*pa==*pb)    return 0;

    else   return -1;

    }

    qsort(data,N,sizeof(int),Cmp);        // 对int型数组进行快速排序(非降序排列)

    p=(int*)bsearch(&a,data,n,sizeof(int),Cmp);

  • 相关阅读:
    Codeforces ECR 83 C. Adding Powers (位运算)
    Codeforces Round #636div3 D. Constant Palindrome Sum (划分区间,差分)
    Codeforces Round #603 C. Everyone is a Winner!
    Centos7 下搭建SVN + Apache 服务器 风行天下
    完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)基础环境搭建 风行天下
    云计算的理解 风行天下
    Python之路3【知识点】白话Python编码和文件操作 风行天下
    C#中TreeView组件使用方法初步
    复制文件时explorer.exe出错解决方法
    C# 里TreeView绑定数据库实现分类
  • 原文地址:https://www.cnblogs.com/herizai/p/3119910.html
Copyright © 2011-2022 走看看