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

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM