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 如果隊尾元素...