快速排序 歸併排序 演算法設計與分析

2021-05-28 15:45:31 字數 1208 閱讀 1729

bubble sort: bubbling

merge sort: divide-and conquer(分而治之)

quick sort: location (元素定位

快速排序

int partition(sqlist &l, int low, int high)

l.r[0] = l.r[low];

pivorkey = l.r[low].key;

while(low < high)

void mergesort(int *a,int n)

} int main()

clock_t s = clock();

mergesort(data, n);

clock_t e = clock();

k = n;

while(k --)

cout << endl;

cout << "the algrothem used " << e-s << " miliseconds."<< endl;

delete data;

return 0;

void mergesort(struct record arr_buffer[40])

}void mergepass(seqlist r,int length)

{int i;

for(i=1;i+2*length-1<=n;i=i+2*length)

merge(r,i,i+length-1,i+2*length-1);

if(i+length-1void merge(int *a,int low,int mid,int high)

int i = low,j = mid + 1,k = 0;

int *temp = (int *)malloc((high - low + 1)*sizeof(int));

while(i <= mid && j <= high)

a[i] < a[j] ? (temp[k++] = a[i++]):(temp[k++] = a[j++]);

while(i <= mid)

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

while(j <= high)

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

memcpy(a + low,temp,(high -low + 1)*sizeof(int));

free(temp);

演算法設計與分析 合 歸併排序

歸併排序的思想是基於分治法的思想之上的,也是有分解 解決 合併這三步。分解 將n個元素的序列分成兩個子串行,記為a 1 n 2.and a n 2 1 n 解決 將兩個子串行分別遞迴歸併排序 合併 將已有序的兩個子串行合併,得到有序的序列。merge sort a 1 n 1.if n 1,done...

歸併排序與快速排序

1.演算法簡介 歸併排序和快速排序都是採用遞迴的結構實現的,不同的是歸併排序在遞迴過程中有合併子串行的過程,而快速排序中沒有,但是快速排序中有較為複雜的劃分過程。二者的平均時間複雜度均為o nlgn 其中快速排序的係數較小 歸併排序最壞情況複雜度為o nlgn 快排在最壞情況下時間複雜度為o n 2...

快速排序與歸併排序

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