氣泡排序、插入排序、選擇排序、歸併排序、快速排序、計數排序、基數排序、桶排序。
1、演算法思想
2、**實現
3、演算法執行效率
插入排序和氣泡排序的時間複雜度相同,都是 o(n2),在實際的軟體開發裡,為什麼我們更傾向於使用插入排序演算法而不是氣泡排序演算法呢?
一、什麼是氣泡排序?
對一組資料進行排序,一次冒泡是依次比較相鄰的兩個資料,若滿足順序要求則不對元素進行交換,若不滿足排序要求,怎交換元素位置。
1、具有n個元素的一組資料,最多需要進行n次冒泡
2、每次冒泡需要進行n-1次比較
3、若某次冒泡中沒有發生元素的交換,說明這組資料已經有序,因此不需要繼續後面的冒泡
int
*bubble_sort
(int n,
int* a)
int tmp =0;
for(
int i =
0; i < n; n++)}
if(flag ==
false)}
return a;
}
二、氣泡排序的其他特性:
1、氣泡排序是原地排序,只需要常量級的臨時空間,所以它的空間複雜度為 o(1),是乙個原地排序演算法
2、氣泡排序是穩定排序,因為如果兩個元素相等不會發生交換
三、評估時間複雜度
氣泡排序的最好情況時間複雜度:o(n) , 元素有序的情況下
氣泡排序的最壞情況時間複雜度:o(n^2),倒序的情況下
氣泡排序的平均情況下的時間複雜度就是: o(n^2)
四、引入有序度、逆序度、滿有序度的概念評估平均情況時間複雜度:
有序度:一組元素中有序的元素對的個數
滿有序度:乙個完全有序的陣列的有序度 n*(n-1)/2
逆序度:一組資料排序後需要交換元素的次數
逆序度 = 滿有序度 - 有序度
一、什麼是插入排序?
首先我們將一組待排序的資料分為已排序區間和未排序區間。對於一組資料它的初始已排序區間只有乙個元素, 每次從未排序區間中拿出乙個元素插入到已排序區間,使得有序區間始終有序。直到未排序區間中的元素為空,排序結束。
int
*intertion_sort
(int n,
int a)
int value =0;
for(
int i =
1; i < n; i++
)else
} a[j +1]
= value;
}return a;
}
二、插入排序的一些特性
插入排序是原地排序,空間複雜度為o(1)
在插入排序中,對於值相同的元素,我們可以選擇將後面出現的元素,插入到前面出現元素的後面,這樣就可以保持原有的前後順序不變,所以插入排序是穩定的排序演算法。
三、插入排序的時間複雜度
最好情況時間複雜度: o(n) ,在資料有序的情況下,每次只需要比較一次就能找到插入點將後面的資料插入
最壞情況時間複雜度:o(n^2) 如果陣列是倒序的,每次插入都相當於在陣列的第乙個位置插入新的資料,所以需要移動大量的資料。
平均情況時間複雜度:還記得我們在陣列中插入乙個資料的平均時間複雜度是多少嗎?沒錯,是 o(n)。所以,對於插入排序來說,每次插入操作都相當於在陣列中插入乙個資料,迴圈執行 n 次插入操作,所以平均時間複雜度為 o(n^2)。
一、選擇排序的演算法思路
選擇排序演算法的實現思路有點類似插入排序,也分已排序區間和未排序區間。但是選擇排序每次會從未排序區間中找到最小的元素,將其放到已排序區間的末尾。
int
*selection_sort
(int a,
int n)
}// 交換
int tmp =0;
tmp = a[i]
; a[i]
= a[min_idx]
; a[min_idx]
= tmp;
}return a;
}
二、選擇排序的時間複雜度
最好情況時間複雜度:o(n^2)
最壞情況時間複雜度:o(n^2)
平均情況時間複雜度:o(n^2)
三、選擇排序的其他特性
1、是原地排序
2、不是穩定排序
資料結構與演算法(九)排序
演算法 時間複雜度 平均 時間複雜度 最壞 時間複雜度 最好 空間複雜度 穩定性氣泡排序 o n 2 o n 2 o n o 1 穩定選擇排序 o n 2 o n 2 o n 2 o 1 不穩定插入排序 o n 2 o n 2 o n o 1 穩定希爾排序 o nlogn o n 2 o n o 1...
資料結構與演算法 四 排序
def heap sort li def heapfly li start len li 2 1 獲取最後乙個葉子節點的父節點 for nod in range start,1,1 left 2 nod 1 right min left 1,len li 1 temp left if li left...
資料結構 2 排序演算法
常見的排序演算法 氣泡排序 選擇排序 插入排序 歸併排序 快速排序 堆排序 includeusing namespace std void swap int a,int i,int j 冒泡法 平均時間複雜度 o n 2 void bubblosort int a,int n void bubblo...