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

 

上一篇:洛谷p1208—混合牛奶【典型贪心】(关联排序小技巧)


下一篇:Docker部署zabbix