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