一、氣泡排序
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...