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 思路 將第乙個元素與剩餘所有元素相比,如果有比第...