資料結構 排序

2021-09-12 14:31:40 字數 2421 閱讀 5645

排序的穩定性:穩定和不穩定

穩定排序:冒泡、直接插入、歸併

不穩定排序:簡單選擇、希爾排序、堆排序、快速排序

內排序和外排序:

內排序在整個排序過程中,待排序的所有記錄全部被房子在記憶體中。外排序是由於排序的記錄個數太多,不能同時放置在記憶體,整個排序過程需要在內外存之間多次交換資料才能進行。

內排序,排序演算法的效能影響因素:

(1)時間效能

(2)輔助空間

(3)演算法複雜性

內排序:

插入排序(直接插入、希爾排序)

交換排序(氣泡排序、快速排序)

選擇排序(簡單選擇、堆排序)

歸併排序(歸併排序)

根據演算法複雜度可分為兩大類:簡單演算法和改進演算法

簡單演算法:氣泡排序、簡單選擇排序、直接插入排序

改進演算法:希爾排序、堆排序、歸併排序、快速排序

基本思想:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。

三種氣泡排序:

(1)不標準的氣泡排序:乙個和全部的進行兩兩比較

(2)標準的氣泡排序:每次都是相鄰兩兩比較

(3)優化的氣泡排序:設定標誌位,在已經有序的情況下不再進行多餘的比較

(交換排序類)

穩定性:穩定排序

時間複雜度:o(n2)

//不是很標準的氣泡排序

public static void bubblesort1(int array) }}

} //標準的氣泡排序

public static void bubblesort2(int array) }}

} //優化後的氣泡排序

public static void bubblesort3(int array) }}

}

基本思想:通過n-i次關鍵字的比較,從n-i+個記錄中選出關鍵字最小的記錄,並和第i個記錄交換。

(和上面那個不標準的氣泡排序有點像,但是選擇排序針對的是陣列下標)

(選擇排序類)

穩定性:不穩定排序

時間複雜度:o(n2)

//簡單選擇排序

public static void ******selectsort(int array)

}if(i!=min)

} }

基本思想:將乙個記錄插到已經排好序的有序表中,從而得到乙個新的、記錄數增1的有序表。

(插入排序類)

穩定性:穩定排序

時間複雜度:o(n2)

//直接插入排序

public static void straightinsertsort(int a)

a[k+1]=temp;

}} }

基本思想:縮小增量排序

(插入排序的公升級,插入排序類)

穩定性:不穩定排序

時間複雜度:o(n3/2)

//希爾排序

public static void shellsort(intlist)

//調整堆結構+交換堆頂元素和末尾元素

for(int j=arr.length-1;j>0;j--)

} //調整大頂堆

public static void adjustheap(int arr,int i,int length) else

} arr[i]=temp;//將temp值放到最終的位置

} //交換元素

public static void swap(int arr,int a,int b)

基本思想:n個有序的子串行,兩兩歸併。2路歸併排序

穩定性:穩定排序

時間複雜度:o(nlogn)

空間複雜度:o(n)

//歸併排序

public static void mergesort(int arr)

private static void mergesort(int arr,int left,int right,int temp)

if(i//從左往右比較

while(iif(i}

a[i]=x;

quicksort(a,l,i-1);

quicksort(a,i+1,r);

} }

資料結構 排序

小小總結了下 希望別不記得 排序型別 排序方法 平均時間 最壞時間 最好時間 穩定空間 插入直接插入 o n2 o n2 o n 穩定o 1 希爾排序 o n3 2 增量序列最後為1,只有公因子1 不穩o 1 選擇簡單選擇 o n2 o n2 o n 穩定o 1 堆排序o n lb n o n lb...

資料結構 排序

郝斌版 資料結構 學習筆記 冒泡 公升序,12比,大放後面,再23比,直至最大的在最後面 插入 2,3,4,依次插入值,保證插入值後的序列為有序的 選擇 後面所有的最小值依次排到最前 快速排序 歸併排序 22排,44排,88排.排序演算法標準 時間,空間,穩定性 排序和查詢的關係 排序是查詢的前提,...

資料結構 排序

1.希爾排序 shellsort 增量序列d n為要排序數的個數 void shellinsertsort int a,int n,int dk n個要排序的數,dk是增量 2 堆排序 已知h s m 除了h s 外均滿足堆的定義 調整h s 使其成為大頂堆.即將對第s個結點為根的子樹篩選,para...