菜鳥修行之路 資料結構 排序

2021-10-04 19:09:57 字數 2751 閱讀 7201

排序:重新排列表中的元素,是表中的元素滿足按關鍵字遞增或者遞減的過程。

對於排序演算法效率以及效能,從以下幾方面來考慮:

演算法種類

時間複雜度

空間複雜度

是否穩定

直接插入排序

最好:o(n)

最壞:o(n2)

平均:o(n2)

o(1)

是氣泡排序

最好:o(n)

最壞:o(n2)

平均:o(n2)

o(1)

是簡單選擇排序

最好:o(n2)

最壞:o(n2)

平均:o(n^2)

o(1)

否快速排序

最好:o(nlog2(n))

最壞:o(n^2)

平均:o(nlog2(n))

o(nlog2(n))

否堆排序

最好:o(nlog2(n))

最壞:o(nlog2(n))

平均:o(nlog2(n))

o(1)

否2-路歸併排序

最好:o(nlog2(n))

最壞:o(nlog2(n))

平均:o(nlog2(n))

o(n)

是基數排序

最好:o(d(n+r))

最壞:o(d(n+r))

平均:o(d(n+r))o®是

注:希爾排序由於它的時間複雜度依賴於增量函式,無法準確計算。

氣泡排序是一種基礎的選擇排序。

演算法思想相鄰2個元素進行比較,如果前乙個元素大於後面乙個元素,則就交換位置,反之就不交換(從小到大)。

具體實現:

public

static

void

bubblesort

(int array)

}}}

氣泡排序的優化:

優化一:採用乙個布林變數作為標記,判斷某一輪排序過程中,是否存在元素交換。如果不存在,則表中元素已經有序,跳出迴圈。

public

static

void

bubblesort_01

(int array)

}if(issorted)

break;}

}

優化二:如果乙個數列本身就部分有序,例如後半部分已經有序。

優化思路:設定乙個布林值,用於劃分有序區和無序區的邊界(每一輪迴圈最後交換元素的位置就是無序區的邊界)。

/**

* 基於邊界的優化版氣泡排序

* @param array

*/public

static

void

bubblesort_02

(int array)

}if(issorted)

break;}

}

快速排序的遞迴實現

/**

* 採用遞迴實現快速排序

*/class

quicksort_01

/** * 單邊迴圈法,獲取一輪排序結束後基準元素的下標

* @param arr 陣列

* @param startindex 起始位置

* @param endindex 結束位置

* @return

*/public

intpartition

(int

arr ,

int startindex,

int endindex)

} arr[startindex]

=arr[mark]

; arr[mark]

=pivot;

return mark;

}}

快速排序的非遞迴實現:採用棧代替遞迴函式

/**

*快速排序的非遞迴實現

*/class

quicksort_02

if(param.

get(

"endindex"

)>pivotindex+1)

}}/** * 單邊迴圈法,獲取一輪排序結束後基準元素的下標

* @param arr 陣列

* @param startindex 起始位置

* @param endindex 結束位置

* @return

*/public

intpartition

(int

arr ,

int startindex,

int endindex)

} arr[startindex]

=arr[mark]

; arr[mark]

=pivot;

return mark;

}}

通常來說,對於排序演算法的比較和應用主要基於以下幾點:

綜上所述,一般來說對於排序演算法的選擇滿足以下原則:

後記

包括線性表、樹、圖、查詢、排序等

修行之路艱辛,與君共勉。

​ ----2023年4月 成都

軟考之路 資料結構

官方來說,資料結構是計算機儲存,組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合和該集合中資料元素之間的關係組成。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。data stucture d,r 其中d是資料元素的集合,r是該集合中所有元素之間的關係的有限集...

考研路 資料結構 查詢2

資料結構常用查詢演算法 插值查詢 在考研路 資料結構 查詢1中,我們發現,二分查詢每次都是從中間開始查詢,若我們查詢的關鍵值是靠近上區間或下區間,則二分查詢效率有待提高。從而我們考慮修改的 為 mid low high 2 low high low 2 從而我們引入插值查詢法,針對1 2,我們改為 ...

ORACLE學習之路 資料庫的儲存結構

最近特別忙,連上網的時間都沒有。今天把oracle的儲存結構介紹一下。oracel資料庫中的資料邏輯儲存在tablespace中,同時物理地儲存在資料檔案中。要了解資料庫的儲存結構,就要先了解資料庫中的資料是存放在 以及存放資料庫的邏輯空間名。oracle中對資料的儲存分了四層,根據儲存大小以及從屬...