資料結構與演算法之排序詳解

2021-08-31 11:29:45 字數 2961 閱讀 5407

一、排序演算法分類:

非線性時間比較類排序:通過比較來決定元素間的相對次序,由於其時間複雜度不能突破o(nlogn),因此稱為非線性時間比較類排序。

線性時間非比較類排序:不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間非比較類排序。 

二、排序演算法複雜度:

三、各種演算法原理及其**

1、氣泡排序(bubble sort)

a.**演示

b.演算法描述:

從左到右依次比較相鄰兩個元素的值,如果前面的數字比後面的數字大就交換位置(將大的數字移到後面),直到最後。

c.**實現:

class bubblesort}}

return arr;}}

2、選擇排序(selection sort):a.**演示:

b.演算法描述:

分為兩個區域:有序區與無序區,將無序區第乙個數字的小標定位最小值下標並與後面的數字想比較,如果後面的數值更小,將下標更新為最小值下標。如果最小值下標不是第乙個值的下標就利用小標將無序區第乙個數值與最小值進行交換。以此類推。

c.**實現:

class selectionsort

//將要插入的值current存入arr[preindex+1]

arr[preindex+1]=current;

}return arr;}}

4、希爾排序(shell sort)a.**演示:b.演算法描述:希爾排序,又稱縮小增量排序。先根據增量將其分組,再不斷縮小增量直到1為止。在之前的分組中不斷的應用插入排序。

c.**實現:

class shellsort

//將要插入的值current存入arr[preindex+增量]

arr[preindex+increment]=current;}}

}return arr;}}

5、歸併排序(merge sort)a.**演示:

b.演算法描述:

該演算法是採用分治法的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。

該方法分為兩部:

1.遞迴:先將序列不斷分解

2:合併:將有序的子串行合併(該方法基於2路歸併,2路歸併一定是有序的子串行,所以第一步要不斷細化到粒度為1的序列,因為粒度為1的序列是有序的!)

c.**實現:

class mergesort

left=new int[arr.length/2];

right=new int[arr.length-arr.length/2];

for(int i=0;iright[index_right])

else

}while(index_lefta.**演示:

b.演算法描述:

一次迴圈:從後往前比較,用基準值和最後乙個值比較,如果比基準值小的交換位置,如果沒有繼續比較下乙個,直到找到第乙個比基準值小的值才交換。找到這個值之後,又從前往後開始比較,如果有比基準值大的,交換位置,如果沒有繼續比較下乙個,直到找到第乙個比基準值大的值才交換。直到從前往後的比較索引》從後往前比較的索引,結束第一次迴圈,此時,對於基準值來說,左右兩邊就是有序的了。

接著分別比較左右兩邊的序列,重複上述的迴圈。

c.**實現:

public static void quicksort(int arr,int low,int high)

//從前往後比較

while(i=ref)

}//沒有判斷會堆疊溢位

if(i>low)

//左邊序列。第乙個索引位置到關鍵值索引-1

quicksort(arr,low,i-1);

//右邊序列。從關鍵值索引+1到最後乙個

if(j線性時間非比較類排序尚未研究...

資料結構與演算法之排序

三 演算法效能 二 七種排序演算法 資料結構之線性表 資料結構之鍊錶 資料結構之串 資料結構之圖 資料結構之排序演算法 對n個資料執行某種操作,使其按照某種規則有序的排列,這樣的操作就是排序。內排序與外排序 按照排序過程中資料是否全放在記憶體中,可以分為內排序和外排序 交插選並 其中內排序又分為插入...

《資料結構與演算法》之排序

資料結構與演算法 之鍊錶 資料結構與演算法 之鏈棧 資料結構與演算法 之佇列 資料結構與演算法 之二分查詢 資料結構與演算法 之二叉樹 如果你是一名程式設計師,或多或少你都了解過 聽說過排序。在專案中我們也會經常用到排序,排序非常重要,現在我在這裡分享一些經典的排序演算法。先附上demo位址 氣泡排...

資料結構與演算法之排序演算法 氣泡排序

2016年10月18日15 34 24 by piaxiaohui 氣泡排序 是一種交換排序,它的基本思想是 兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。氣泡排序的由來,就有些類似於水中的bubble,比較輕的bubble始終在水的底層,而較輕的bubble在水的上層 較輕的b...