1. 程式人生 > >《演算法(第四版)》排序-----模板

《演算法(第四版)》排序-----模板

本書對排序類演算法有一個模板,包括了以下幾種方法:

(1)sort():這個方法裡面實現的就是排序的演算法

(2)less():這個方法裡是利用了Comparable接口裡的compareTo方法,其中compareTo方法對於本物件與傳入的比較物件小於,等於,大於,分別返回負數,0,正數

                             這個方法如果compareTo方法結果為負數就返回true,否則返回false

(3)exch():這個方法就是exchange,交換,用的傳統方法,先找個temp,然後三者交換

(4)show():將數組裡的元素進行列印

(5)main():

模板具體如下

public class Selection {
	public static <T> void sort(Comparable<T>[] a){
	//具體的排序演算法實現程式碼
	}
	private static <T>boolean less(Comparable<T> v, Comparable<T> w){
		return v.compareTo((T) w) < 0;
	}
	private static <T> void exch(Comparable<T>[] a, int i, int j){
		Comparable<T> t = a[i];
		a[i] = a[j];
		a[j] = t;
	}
	private static <T> void show(Comparable<T>[] a){
		//在單行中列印陣列
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + "");
			System.out.println();
		}
	}
	public static <T> boolean isSorted(Comparable<T>[] a){
		//測試陣列元素是否有序
		for (int i = 0; i < a.length; i++) {
			if(less(a[i], a[i-1]))
				return false;
		}
		return true;
	}
	public static void main(String[] args) throws FileNotFoundException {
		// TODO Auto-generated method stub
//		String[] a = {"S","O","R","T","E","X","A","M","P","L","E"};
		sort(a);
		assert isSorted(a);
		show(a);
		
	}
}
觀察之後可以發現:

排序演算法的模板傳入的引數規定了,都得是實現了Comparable介面的資料型別,這樣就可以直接按照各自的資料比較習慣進行排序了

v.compareTo(w)<0這樣的程式碼,如果v和w無法進行比較,或者兩者之一有一個null,則v.compareTo(w)會丟擲一個異常。

相關推薦

演算法排序-----模板

本書對排序類演算法有一個模板,包括了以下幾種方法: (1)sort():這個方法裡面實現的就是排序的演算法 (2)less():這個方法裡是利用了Comparable接口裡的compareTo方法,其中compareTo方法對於本物件與傳入的比較物件小於,等於,大於,分別返

演算法排序-----快速排序

參考文章:   http://ahalei.blog.51cto.com/4767671/1365285 1.概念 快速排序,聽這個名字就能想到它排序速度快,它是一種原地排序(只需要一個很小的輔助棧,注意不是陣列),且將長度為N的陣列排序所需的時間和NlgN成正比 缺點是

演算法排序-----歸併排序

參考文章的地址:http://www.cnblogs.com/skywang12345/p/3602369.html 歸併排序基本原理是將兩個有序的陣列,在合併的過程中進行排序成一個更大的有序陣列。 歸併排序的時間複雜度為NlogN,缺點是需要額外的記憶體空間 歸併排序的

演算法排序-----插入排序

插入排序: 插入排序與選擇排序一樣,當前索引左邊的所有元素都是有序的,但和選擇排序不一樣的是它們的位置不是固定的,可能為了更小的元素騰出空間,它們向後移動,但是當索引達到陣列的右端時,陣列排序就完成了 使用插入排序為一列數字進行排序的過程 具體演算法描述如下: 從第一

演算法排序-----堆排序

1.什麼是堆? 講堆排序之前,先了解一下什麼是堆。堆其實相當於一種資料結構,它的本質是一種陣列物件,但是它裡面的內同又是一顆完全二叉樹結構,它的特點是父節點的值大於(或小於)兩個子節點的值,常常用於優先佇列、堆排序等。 堆在陣列中的索引有如下的特點。陣列索引為k的元素,它

演算法排序-----優先佇列

  在實際應用中,我們常常不一定要求整個陣列全部有序,或者不需要一次就將它們排序,可能只需要當前陣列的鍵值最大的元素或最小的元素,這時就類似於總在處理下一個優先順序最高的元素,在這種情況下一個合適的資料結構應該支援兩種操作:刪除最大元素和插入元素。這種型別叫做優先佇列 實

演算法——佇列

繼續複習...... 定義 佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。

演算法第一章筆記

第一章 基礎 1.1 基礎程式設計模型  4 1.1.1 Java程式的基本結構  4 1.1.2 原始資料型別與表示式  6 1.1.3  語句  8 1.1.4  簡便記法  9 1.1.5  陣列  10 1.1.

算法學習筆記——初級排序算法

space 倒序 優勢 name 算法 turn 資料 eply n) 時間復雜度(Time Complexity): 總運算次數表達式中受n的變化影響最大的那一項(不含系數)(註:若算法中語句執行次數為一個常數,則時間復雜度為O(1)) 若T(n)/f(n)求極限可得

Thinking in Java—— 第二章 一切皆對象

ati 靜態 數據類型 thinking short str 變量 屬於 字符 一.對象保存的位置 寄存器(cpu) 棧(變量) 堆(對象) 靜態域(static) 常量池(string) 非內存區池 二.基本數據類型 整數型 byte short int

練習代碼——《算法

style .so oid 2.0 gcd main i++ java static 2017年11月20日。 1 import java.util.Arrays; 2 3 public class Program 4 { 5 public

JavaScript入門經典讀書筆記

utc 文件名 ttext 文檔 開頭 rep 顯示 部分 body 第一部分 Web腳本編寫與JavaScript語言的概念 1.document.lastModified() -> 返回文檔修改日期 2.<head>標簽中的<sc

笨辦法學Python pdf 下載

知乎、CSDN等各大論壇技術大牛推薦的Python自學入門暢銷書《笨辦法學Python》重磅升級,所有案例均基於Python3.6編寫。  免費提供長達5個小時的配套教學視訊,用手機掃碼線上觀看視訊,更方便。  Zed A. Shaw建立了一套非常有效的Python 3學習

Java程式設計題解與上機指導七章 Java語言的高階特性 7.2藉助泛型定義一個線性表

線性表:由相同型別的物件組成的一個線性結構360百科: 定義 線性表(linear list)是資料結構的一種,一個線性表是n個具有相同特性的資料元素的有限序列。資料元素是一個抽象的符號,其具體含義在不同的情況下一般不同。 在稍複雜的線性表中,一個數據元素可由多個數據項(

JAVA 程式設計題解與上機指導三章表達式和流程控制語句 題3.9

/**3.9編寫列印乘法口訣表*/ public class MultipleTable { public static void main(String args[]) {MultipleTable multiple=new MultipleTable(); int n=

JAVA 程式設計題解與上機指導 第二章·識別符號、關鍵字和資料型別 2.12

/*2.12 設計實現一個MyGraphic類及子類,它們代表一些基本圖形,這些圖形包括矩形、三角形、圓、橢圓、菱形、梯形等。 試給能描述這些圖形所必需的屬性及必要的方法 **/ public class MyGraphic { String lineColor;//線條顏色 Strin

學習JavaScript資料結構與演算法2.epub

  【下載地址】 本書首先介紹了JavaScript 語言的基礎知識以及ES6 和ES7 中引入的新功能,接下來討論了陣列、棧、佇列、連結串列、集合、字典、散列表、樹、圖等資料結構,之後探討了各種排序和搜尋演算法,包括氣泡排序、選擇排序、插入排序、歸併排序、快速排序、堆排序、

C++Primer 中文版學習記錄

2018年7月21日 P6   第一章 快速入門 #include <iostream> int main() {     std::cout << "Enter two numbers:" << std::endl

C語言入門經典.pdf

《C語言入門經典(第4版)》的目標是使你在C語言程式設計方面由一位初學者成為一位稱職的程式設計師。讀者基本不需要具備任何程式設計知識,即可通過《C語言入門經典(第4版)》從頭開始編寫自己的C程式。研讀《C語言入門經典(第4版)》,你就可以成為一位稱職的C語言程式設計師。從許多方面來說,C語言

鳥哥的私房菜---高清---免費!!!!!!!!!!!!

#-----既然是分享,就應該免費------ 連結: https://pan.baidu.com/s/1bputPsu12PqDrGkuvj8wPQ 密碼: qusj 歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習