自定义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<<'\n';    
    }
};    
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;
}

 

 

 

 

posted @ 2019-07-22 19:54  浅滩浅  阅读(2450)  评论(1编辑  收藏  举报