zoukankan      html  css  js  c++  java
  • 自定义sort排序

    java的sort自定义:

    1.排序对象必须是封装类而不能是基本数据类型;

    2.调用Arrays.sort(array, left, right, cmp)进行排序,array为数组,left、right为范围,cmp为你定义的比较函数;

    3.定义的cmp对象需要重写Comparator<>类的compare方法;

    import java.util.*;
    public class Main
    {
        static Integer []A = null;
        public static void main(String args[]) 
        {
            Scanner in = new Scanner(System.in);
            Comparator<Integer> cmp = new Comparator<Integer>() {
                public int compare(Integer a, Integer b) {
                    return b - a;//降序
                }
            };
            int n = in.nextInt();
            A = new Integer [n];
            for (int i = 0; i < n; i++) A[i] = in.nextInt();
            Arrays.sort(A, 0, n, cmp);
            for (Integer i : A) System.out.println(i);
        }

    复习一下c++的自定义sort

    第一种:自定义类

    sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。 invalid use of non-static member function
    因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。

    静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态成员。 

    #include <iostream>
    #include "algorithm" 
    #include "cmath"
    using namespace std;
    class deal{
        public: 
        static bool cmp(int l,int r){
            return l>r;//降序 
        }
        void test(int *arr,int size){
        sort(arr,arr+size,cmp);
        for(int i=0;i<size;++i)
        cout<<arr[i]<<" ";
        cout<<'
    ';    
        }
    };    
    int main()
    {
        deal a;
        int arr[8]={1,9,2,3,7,0,6,4};
        a.test(arr,8);
        return 0;
    }  

    第二种自定义比较函数:

    #include <iostream>
    #include "algorithm" 
    #include "cmath"
    using namespace std;
    bool cmp(int l,int r){
        return l>r;
    }
    int main()
    {
        
        int arr[8]={1,9,2,3,7,0,6,4};
        sort(arr,arr+8,cmp);
        for(int i=0;i<8;i++)
        cout<<arr[i]<<' ';
        cout<<endl;
        return 0;
    }

     

    不一样的烟火
  • 相关阅读:
    RT: TCP connection close
    RT: TCP REUSEADDR or REUSEPORT
    RT:How HTTP use TCP connection
    一些英语技巧
    [转] HBase的特征和优点
    [转] Java多线程发展简史
    [转] socket异步编程--libevent的使用
    连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
    出现”/var/lib/mysql/mysql.sock“不存在的解决方法
    eclipse代码编辑器中按alt+/提示No Default Proposals 的解决方法
  • 原文地址:https://www.cnblogs.com/cstdio1/p/11228034.html
Copyright © 2011-2022 走看看