什麼是排序
從字面上理解,排序的過程就是把無序變成有序的過程。從應用來說,可以分三個層次理解:
①整數排序,這是所有程式設計師剛接觸排序演算法時的直觀感受,輸入一些隨機整數,然後將其排序後輸出出來。
②關鍵字排序,用過excel排序的人對此應該不陌生,我們可以根據不同的關鍵字對資料記錄進行排序,還可以有排序主字段和二級欄位等概念。
③按要求排序,這是廣義上的排序方法,舉個例子,我們在玩兒某些撲克牌遊戲時,三張4是大於兩張5的,這個時候要求我們按照元素個數排序,即多的放前面。
排序中的基本操作
排序中用到的最多的操作肯定是比較大小,還有就是交換兩個原始的位置。這些基本操作經常被用來分析排序演算法的時間複雜度。
排序演算法的分類
按照不同的分類標準,排序演算法有不同的分類
①是否穩定,即如果排序關鍵字的值相同,排序前後這兩條記錄的相對位置是否會發生改變。這一性質在多關鍵字排序中非常重要,如果排序演算法不穩定,那就無法應用到多關鍵字排序中。
②涉及的儲存器型別,一般排序演算法都是在記憶體中進行的,即所有待排序記錄已經讀到記憶體中了,這樣的排序演算法稱為內部排序。接下來的分類標準全部是在內部排序前提下進行的。但是,資料量非常大時,記憶體無法一次儲存所有資料,我們要
分批讀入
外存中的資料然後排序,這樣的排序方法稱為外部排序。
③依據原則,根據排序演算法依據的原則,可以將排序分為插入排序、交換排序、選擇排序、歸併排序和計數排序幾種型別。
④時間複雜度,按照排序演算法的時間複雜度可以將其分為簡單排序(o(n^2)),先進排序(o(nlogn)),基數排序(o(d*n))。
⑤代排序記錄的資料結構,一般排序記錄的資料結構有三種:第一種是簡單的順序儲存,記錄本身放在乙個陣列中。要排序就必須交換陣列元素的位置。第二種是靜態鍊錶,記錄間靠指標連線,排序的過程不需要改變鍊錶結點位置,只需要改變指標指向即可。第三種是指標陣列,記錄本身隨意儲存,而將其位址存放於乙個陣列中,通過對指標陣列排序,間接得到記錄的有序集合。
最後說明:
沒有最好的
排序演算法
,只有合適的排序思想。
排序演算法多種多樣,沒有哪一種演算法可以完美解決所有問題。之所以有這麼多的分類標準,就是要求我們根據實際問題來選擇最合適的演算法。另一方面,學習排序演算法並不僅僅是為了排序,網路中和書上有所有演算法的現成**,我們要掌握的是排序演算法解決問題的思路
,而不是去背這些**。
初識Java(Java陣列 陣列排序演算法
1.1 氣泡排序 在程式設計中,經常需要將一組數列進行排序,這樣更加方便統計與查詢。氣泡排序是最常用的陣列排序演算法之一,它排序陣列元素的過程總是將小數往前放 大數往後放,類似水中氣泡往上公升的動作,所以稱作氣泡排序。1 基本思想 氣泡排序的基本思想是對比相鄰的元素值,如果滿足條件就交換元素值,把較...
初識A 演算法
初識a 演算法 sunway 目 錄 1 何謂啟發式搜尋演算法 2 初識a 演算法 寫這篇文章的初衷是應乙個的要求,當然我也發現現在有關人工智慧的中文站點實在太少,我在這裡拋磚引玉,希望大家都來熱心的參與。還是說正題,我 先拿a 演算法開刀,是因為a 在遊戲中有它很典型的用法,是人工智慧在遊戲中的代...
初識A 演算法
寫這篇文章的初衷是應乙個的要求,當然我也發現現在有關人工智慧的中文站點實在太少,我在這裡拋磚引玉,希望大家都來熱心的參與。還是說正題,我先拿a 演算法開刀,是因為a 在遊戲中有它很典型的用法,是人工智慧在遊戲中的代表。a 演算法在人工智慧中是一種典型的啟發式搜尋演算法,為了說清楚a 演算法,我看還是...