歸併排序與快速排序

2021-07-15 14:52:58 字數 1052 閱讀 9770

1.演算法簡介

歸併排序和快速排序都是採用遞迴的結構實現的,不同的是歸併排序在遞迴過程中有合併子串行的過程,而快速排序中沒有,但是快速排序中有較為複雜的劃分過程。

二者的平均時間複雜度均為o(nlgn),其中快速排序的係數較小;歸併排序最壞情況複雜度為o(nlgn),快排在最壞情況下時間複雜度為o(n^2)。

歸併排序步驟:

分解:分解待排序的n個元素的序列成各具有n/2個元素的兩個子串行。

解決:使用歸併排序遞迴地排序兩個子串行

合併:合併兩個已經排序的子串行以產生已排序的答案。

快速排序步驟:

分解:陣列a[p..r]被劃分為兩個(可能為空)子陣列a[p..q-1]和a[q+1..r],使得a[p..q-1]中的每乙個元素都小於等於a[q],而a[q]也小於等於a[q+1..r]中的每個元素

解決:通過遞迴呼叫快速排序,對子陣列a[p..q-1]和a[q+1..r]進行排序

合併:不需要合併操作,原址排序。

2.c++/c語言實現

歸併排序:

void mergesort(int a,int s,int t)

for (int q = 0; q < t - s - m; q++)

k = s;

while (k<=t)

else if (i >= m + 1)

else

else

}} delete l;

delete r;

return;

}

快速排序:

void quicksort(int a,int s,int t)

a[i] = a[j];

while (i < j&&a[i] <= key)

a[j] = a[i];

} a[i] = key;

m = i;

quicksort(a, s, m - 1);

quicksort(a, m + 1, t);

} return;

}

快速排序與歸併排序

簡單總結一下快速排序和歸併排序的用法,這兩種方法十分省時,在題目中常用。快速排序 基本思想通過一趟排序將代拍記錄分成兩部分,一部分記錄關鍵字比另一部分小,再對這兩部分記錄繼續排序,達到整個序列有序。具體做法是附設兩個指標i和j,初值分別為l,r,任選乙個記錄做樞紐取mid,首先從j位置向前搜找到第乙...

歸併排序與快速排序

1.分治思想顧名思義,就是分而治之的意思,將大問題換分為無數個小問題,小的問題解決了,大的問題自然也就解決了。分之演算法一般都是用遞迴來實現的。分治是一種解決問題的處理思想,遞迴是是一種程式設計技巧。2.歸併排序歸併排序的核心思想 就是講乙個陣列分為前後兩部分分別進行排序,然後將有序的兩個陣列再合併...

歸併排序與快速排序

void merge sort int arr,int l,int r private static void quicksort int arr,int low,int high private static int getindex int arr,int low,int high 如果隊尾元素...