排序演算法 經典的排序演算法總結

2021-08-28 01:17:40 字數 2490 閱讀 1137

一、氣泡排序

1.氣泡排序的思想

對於乙個長度為n的陣列,從小到大進行排序。

0~n-1範圍內,兩兩進行比較與交換,結果是最大的元素放在陣列的最後面(即n-1位上);

0~n-2範圍內,兩兩進行比較與交換,結果是第二大元素放在最後面(即n-2位上);

重複上述過程,直到範圍縮小到只有0位的乙個元素為止。

2.例項分析

eg: array=

第一次排序:4 3 2 15

第二次排序:3 2 14 5

第三次排序:2 13 4 5

第四次排序:12 3 4 5

3.**

public

static

void bubble_sort(int array)}}

}

4.複雜度和穩定性分析

最差情況和平均情況的時間複雜度為o(n^2);

空間複雜度為o(1);

是穩定的排序演算法。

二、選擇排序

1.選擇排序的思想

對於乙個長度為n的陣列,從小到大進行排序。

0~n-1範圍內,選擇最小的乙個元素,與0位上的數進行交換;

1~n-1範圍內,選擇最小的乙個元素,與1位上的數進行交換;

重複上述過程,直到範圍縮小到只有n-1位的元素為止。

2.例項分析

eg: array=

第一次排序:14 3 2 5

第二次排序:1 23 4 5

第三次排序:1 2 34 5

第四次排序:1 2 3 45

3.**

public

static

void select_sort(int array)

//交換最小的數與i-1位的數

int temp = array[min];

array[min] = array[i - 1];

array[i - 1] = temp;}}

}

4.複雜度和穩定性分析

平均情況的時間複雜度為o(n^2);

空間複雜度為o(1);

是不穩定的排序演算法。

為什麼不穩定呢?比如:22 21這個陣列,第一次排序後為12 22,其中1和第乙個2進行交換,由此可知這三個2的相對位置發生了變化,故為不穩定的排序。

三、插入排序

1.插入排序的思想

對於乙個長度為n的陣列,從小到大進行排序。

0~1範圍內,將1位的數與0位的數進行比較,若1位的數小於0位的數,則把1位的數插入到0位;

0~2範圍內,將2位的數與1位和0位的數進行比較,插入到合適的位置;

重複上述過程,直到n-1位的數與之前的元素進行比較,並且插入到合適位置為止。

2.例項分析

eg: array=

第一次排序:45 3 2 1

第二次排序:34 5 2 1

第三次排序:23 4 5 1

第四次排序:12 3 4 5

3.**

public

static

void insert_sort(int array)

}}

4.複雜度和穩定性分析

平均情況的時間複雜度為o(n^2);

空間複雜度為o(1);

是穩定的排序演算法。

三、希爾排序

1.希爾排序的思想

希爾排序是插入排序的改良,插入排序的步長為1,而希爾排序的步長是動態遞減的,最後會減為1。

2.例項分析

eg: array=

第一次排序:2 1 3 5 4 步長為3

第二次排序:2 1 3 5 4 步長為2

第三次排序:1 2 3 4 5 步長為1

3.**

public

static

void shell_sort(int array)

} }}

}

4.複雜度和穩定性分析

平均情況的時間複雜度為o(n~n^2),與步長的選擇有關;

空間複雜度為o(1);

是不穩定的排序演算法。

排序演算法 經典排序演算法之氣泡排序

氣泡排序很經典了,有人比喻過像是排序演算法中的hello world,很貼切。演算法的基本思想是每次都需要兩兩比較大小。氣泡排序演算法的過程如下 從前往後 1 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。2 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應...

排序演算法 經典排序演算法之選擇排序

演算法的基本思想,是從無序中選擇最小的元素,然後交換。1 從陣列的第乙個元素開始,將待排序陣列分為有序和無序兩個區間。2 從無序陣列中選取最小的元素和有序陣列的最後乙個元素交換。3 重複第2步,直到無序陣列沒有元素為止。時間複雜度為o n n 空間複雜度為o 1 選擇排序是給每個位置選擇當前元素最小...

排序演算法 經典排序演算法之快速排序

快速排序的基本思想是分治法,即按照範圍內的第乙個元素劃分為兩個部分,再歸併排序。整體排序的過程有點類似建立平衡二叉樹的過程。1 假設陣列長度為len,low 0,high len 1。以陣列low為標準,根據和首元素的大小關係將待排序陣列分為兩個部分,返回分組index。2 陣列被劃分為兩部分0到i...