排序在各次面試的過程中問道的次數不少,氣泡排序和快速排序尤多。因此做一些總結,尤其是**部分。
1. 氣泡排序
(1)思想
在一組數中,對當前未排好序的數,自上而下地對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的數往上冒。
(2)複雜度
平均情況-o(n^2)
最壞情況-o(n^2)(逆序有序)
最好情況-o(n)(正序有序)
空間複雜度-o(1)
(3)穩定性 穩定
(4)偽碼
bubblesort(a)
} }}
void bubble_sort(int a, int length)
} }}
2. 快速排序
(1)思想
選擇乙個基準元素(通常是第乙個或者最後乙個),通過一趟排序將排序陣列分成比基準元素小的部分和比基準元素大的部分,此時基準元素在這兩個部分的中間位置,然後再分別對這兩個部分排序。
一趟排序:
1)設定左索引、右索引和基值
2)從右往左找更小,調換更小與索引位置
3)從左往右找更大,調換更大與索引位置
(2)複雜度
平均情況-o(nlogn)
最壞情況-o(n^2)(基本有序)
最好情況-o(nlogn)(每次都將序列分為兩個部分)
空間複雜度-o(nlogn)
(3)穩定度
不穩定(4)偽碼
partition(a, p, r)
} exchange a[i+1] and a[r]; // 將基值交換到切分點上
return i+1;
}quicksort(a, p, r)
{ if p
(5)c++實現
int partition(int a, int low, int high)
{ int pivot=a[high];
int i=low-1;
for(int j=low; jqsort()函式
1)函式庫
#include
2)用法
void qsort(void *base, int nelem, int width, int (*fcmp)(const void *, const void *)); 3)
面試常考各類排序演算法總結 c
面試以及考試過程中必會出現一道排序演算法面試題,為了加深對排序演算法的理解,在此我對各種排序演算法做個總結歸納。1.1 演算法描述 1 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。2 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。3 針對...
面試常考各類排序演算法總結 c
面試以及考試過程中必會出現一道排序演算法面試題,為了加深對排序演算法的理解,在此我對各種排序演算法做個總結歸納。1.1 演算法描述 1 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。2 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。3 針對...
常考排序演算法
演算法思想 氣泡排序與快速排序屬於互換類的排序方法。氣泡排序是通過相鄰資料元素的交換逐步將線性表變成有序。基本過程為 首先,從表頭開始掃瞄線性表,在掃瞄的過程中逐次比較相鄰兩個元素的大小。若前面元素大於後面元素,則將它們互換消去乙個逆序。然後,從後到前掃瞄剩下的線性表,同樣在掃瞄過程中比較兩個元素的...