排序入門:排序類的模板&定義一個(gè)可排序的數(shù)據(jù)類型

排序算法類的模板:

public class Example
{
    public static void sort(Comparable[] a)
    { /* */ }
    
    #對元素進(jìn)行比較
    private static boolean less(Comparable v,Comparable w)
    { return v.compareTo(w)<0 }
    
    # 將元素交換位置
    private static void exch(Comparable[] a,int i,int j)
    { Comparable t=a[i];a[i]=a[j];a[j]=t }
    
    #在單行中打印數(shù)組
    private static void show(Comparable[] a)
    {
        for (int i=0;i<a.length;i++)
            StdOut.print(a[i] + " ");
        StdOut.printIn();
    }
    
    #測試數(shù)組元素是否有序
    public static boolean isSorted(Comparable[] a)
    {for (int i=1; i<a.length;i++)
        if (less(a[i],a[i-1])) return false
        return true;
    }
    
    #從標(biāo)準(zhǔn)輸入讀取字符串,將他們排序并輸出
    public static void main(String[] args)
    {
        String[] a = In.readString();
        Sort(a);
        assert isSorted(a);
        show(a)
    }
}

定義一個(gè)可排序的數(shù)據(jù)類型

創(chuàng)建自己的數(shù)據(jù)類型時(shí),我們只要實(shí)現(xiàn)Comparable接口就能保證用例代碼可以將其排序。要做到這點(diǎn),需要實(shí)現(xiàn)一個(gè)compareTo() 方法來定義目標(biāo)類型對象的自然次序

CASE1:
創(chuàng)建一個(gè)可排序的數(shù)據(jù)類型

package rankCore;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class dateRank implements Comparable<dateRank> {
    private static final Logger logger = LoggerFactory.getLogger(dateRank.class);
    private final int day;
    private final int month;
    private final int year;

    public dateRank(int d, int m, int y) {
        day = d;
        month = m;
        year = y;
    }

    public int getDay() {return day;}

    public int getMonth() {return month;}

    public int getYear() {return year;}

    public int compareTo(dateRank o) {
        if (this.year > o.year) { return 1; }
        if (this.year < o.year) { return -1; }
        if (this.month > o.month) { return 1; }
        if (this.month < o.month) { return -1; }
        if (this.day > o.day) { return 1; }
        if (this.day < o.day) { return -1; }
        return 0;
    }

    @Override
    public String toString() {
        return month + "/" + day + "/" + year;
    }
}

測試用例:

import static java.util.Arrays.sort;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rankCore.dateRank;

public class dateRankTest {
    private static final Logger logger = LoggerFactory.getLogger(dateRankTest.class);

    public static void main(String args[]) {
        dateRank[] dateranks = new dateRank[2];
        dateranks[0] = new dateRank(15, 4, 1991);
        dateranks[1] = new dateRank(05, 4, 1991);
        sort(dateranks);
        for(int i=0; i<dateranks.length;i++)
            //System.out.println(dateranks[i].toString());
            logger.info(dateranks[i].toString());
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,820評論 11 349
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,753評論 18 399
  • 那些年 我望著時(shí)光遠(yuǎn)去 隨風(fēng)而逝的 不止是回憶 那些年 我看著英雄遲暮 漸漸低下的 不止是倔強(qiáng) 那些年 我背著時(shí)光...
    夜楓千年閱讀 182評論 0 0
  • 杏在他懷里啜泣著。蕭覺得這哭聲和她緊緊扣在他腰間的雙手仿佛將他的骨髓都吸盡了,他渾身冰涼。她緊閉著雙服,就像熟睡了...
    何啊精閱讀 1,565評論 0 0
  • 20坪的挑高小豪宅,裝修公司將挑空處保留給客廳及餐廳公領(lǐng)域,小孩房夾層上方規(guī)劃出多一倍的空間,增添一間書房,充分發(fā)...
    Mr_SoLin閱讀 378評論 0 0

友情鏈接更多精彩內(nèi)容