排序演算法總結

2021-07-22 19:29:42 字數 2192 閱讀 1520

排序演算法分為兩類:

1:基於比較的排序,這一類排序演算法的下限是o(nlogn)

2: 非基於比較的排序,這一類排序演算法可以突破下限時間複雜度可以達到o(n),比如:計數排序,桶排序,和在此基礎上的基數排序

下面這個**總結了各種排序演算法的複雜度與穩定性:

一:氣泡排序

void bubblesort(int a, int n)
二:選擇排序

void selectsort(int a, int n)

}

三:直接插入排序

直接插入排序(insertion sort)的基本思想是:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。

設陣列為a[0…n-1]。

初始時,a[0]自成1個有序區,無序區為a[1..n-1]。令i=1

將a[i]併入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

i++並重複第二步直到i==n-1。排序完成。

void insertsort2(int a, int n)

}

四:快速排序

該方法的基本思想是:

1.先從數列中取出乙個數作為基準數。

2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

3.再對左右區間重複第二步,直到各區間只有乙個數。

//快速排序

void quick_sort(int s, int l, int r)

s[i] = x;

quick_sort(s, l, i - 1); // 遞迴呼叫

quick_sort(s, i + 1, r);}}

五:歸併排序

其的基本思路就是將陣列分成二組a,b,如果這二組組內的資料都是有序的,那麼就可以很方便的將這二組資料進行排序。如何讓這二組組內資料有序了?

可以將a,b組各自再分成二組。依次類推,當分出來的小組只有乙個資料時,可以認為這個小組組內已經達到了有序,然後再合併相鄰的二個小組就可以了。這樣通過先遞迴的分解數列,再合併數列就完成了歸併排序。

//將有二個有序數列a[first...mid]和a[mid...last]合併。

void mergearray(int a, int first, int mid, int last, int temp)

while (i <= m)

temp[k++] = a[i++];

while (j <= n)

temp[k++] = a[j++];

for (i = 0; i < k; i++)

a[first + i] = temp[i];

}void mergesort(int a, int first, int last, int temp)

}bool mergesort(int a, int n)

六:堆排序

//  從i節點開始調整,n為節點總數 從0開始計算 i節點的子節點為 2*i+1, 2*i+2

void minheapfixdown(int a, int i, int n)

a[i] = temp;

}//在最小堆中刪除數

void minheapdeletenumber(int a, int n)

//建立最小堆

void makeminheap(int a, int n)

//堆排序

void minheapsorttodescendarray(int a, int n)

}

七:希爾排序

該方法的基本思想是:先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。

void shellsort3(int a, int n)

排序演算法總結

1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...

排序演算法總結

1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...

排序演算法總結

學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...