演算法大全(一) 氣泡排序,插入排序,選擇排序

2021-10-01 14:43:51 字數 1962 閱讀 6338

1.排序演算法的執行效率

1)最好情況,最壞情況,平均情況時間複雜度

2)時間複雜度的係數,常數和階數

3)比較次數和交換次數

2.排序演算法的記憶體消耗

記憶體消耗可以引入空間複雜度來衡量,原地排序演算法,特指空間複雜度為o(1)的演算法

3.排序演算法的穩定性

穩定性是指,如果待排序的序列中有相等的元素,經過排序之後,相等元素之間原有的先後順序不變。

1.氣泡排序

private static void test2(int arrs) 

for(int i=0;iarrs[j])

}if (flag)

}}分析:

1.氣泡排序是原地排序演算法嗎?

是原地排序演算法,他的排序過程中,可以不引入其他的變數,就算上boolean flag變數,他也是個空間複雜度為o(1)的演算法

2.氣泡排序是穩定的排序演算法嗎?

是穩定的排序演算法,因為當相鄰的兩個元素是相同的時候,我們不調換位置,所以冒泡是穩定的

3.氣泡排序的時間複雜度是多少?

最好情況下,本來就是有序的,我們只需要排序一次就可以了,所以最好複雜度是o(n)

最壞情況下,完全倒序的,我們需要排序n次,所以最壞複雜度是o(n^2)

平均情況下,如何計算呢?

用有序度和逆序度來描述。

有序度時陣列中具有有序關係的元素的大小。比如[2,4,3,1,5,6] 有序度是11

而我們稱[1,2,3,4,5,6]這種陣列,它們的有序度是n(n-1)/2,是滿有序

而乙個陣列從初始刀滿有序,需要進行交換,交換一次有序度就加一。

所以交換次數=滿有序-有序度

可以看出最差的情況就是有序度是0,然後到滿有序需要交換n(n-1)/2次,而最好的情況是滿有序一次都不交換。

所以我們取它們的中間 n(n-1)/2/2 =n(n-1)/4 也就是約等於n^2,所以平均時間複雜度就是n^2

2.插入排序
//插入排序(插入排序主要分為兩個區域,第一是有序的區域,第二是無序的區域,拿著無序區域中的第乙個跟所有有序區的區比,如果

// 無序區域的第乙個值小於有序區的值,那就將有序區的值向後移動一位,再比較,直到陣列到0或者有序區的資料小於無序區的資料,

// break 最後將無序區的第乙個值插入到最新的位置。)

public static void test3(int arrs)

for (int i=1;i=0;j--)else

}arrs[j+1]=value;//將無序區的資料賦值過去

}}分析:1.插入排序是不是原地排序呢?

是原地排序

2.插入排序是穩定的排序演算法麼?

是穩定的排序演算法,如果相鄰的倆個值相等,那麼是不會調換位置的

3.插入排序的時間複雜度是多少?

最好時間複雜度是n

最壞時間複雜度是n

而它的平均時間複雜度計算,我們可以考慮一下,在陣列中插入乙個值的話,他的時間複雜度是n,因為要移動n次

那插入n個值,他的時間複雜度當然就是n^2了。

3.選擇排序
//選擇排序,分為有序區和無序區,從無序區中選擇乙個最小的放到有序區的末尾。

public static void test4(int arrs)

for(int i=0;i4.為什麼插入排序要比氣泡排序好一些?1.插入排序和氣泡排序的時間複雜度都是n^2,而且都是穩定演算法,而且都是原地排序,那為什麼插入排序要好一些呢?

可以仔細的觀察,氣泡排序的話,它比較完了元素之後進行交換的時候,至少需要3步才能實現

int tmp=a;

a=b;

b=tmp;

而插入排序的話,只需要移動一次即可

a[j+1]=a[j];

所以可以看出來,比如一次賦值操作需要耗費m的時間,氣泡排序耗費3m的時間,而插入排序耗費k的時間,這樣來看,那就是插入時間要少一些。

排序演算法 冒泡 選擇 插入排序

本文簡單總結一下三大排序演算法,如有不足,請多多提意見。簡述 從小到大排序,每次比較兩個元素,看他們的順序有沒有錯,如果錯了就換過來。a 比較abc.元素,如果第乙個比第二個大,則將兩個元素交換位置 bac.再依次將a和c進行比較。b 對每一對相鄰的元素做同樣的工作,從第一對到最後一對。這一次執行完...

排序演算法 冒泡 選擇 插入排序

外層迴圈控制大排序次數,內層迴圈控制每次大排序的排序次數 一次大排序就可以把最小的資料放在最前面。1 對陣列中的各資料,依次比較相鄰的兩個元素的大小 2 如果前面的資料大於後面的資料,就交換著兩個資料。經過第一 排序後,便可把最小的資料排好。3 然後再用同樣的方法吧剩下的資料逐個比較,最後得到從小到...

《演算法》選擇排序 插入排序 氣泡排序

選擇排序,演算法 p156 package algorithm public class selection p156 for int i 0 i n i public static void main string args test.sort a 思路 將第乙個元素與剩餘所有元素相比,如果有比第...