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; }