遞迴 快速排序與歸併排序

2021-08-20 02:13:56 字數 1302 閱讀 9619

#includeint a[101], n;//定義全域性變數,將在子函式中呼叫

void quicksort(int left, int right)

}//最終將基數歸位(基數歸中)

a[left] = a[i];//將i,j相遇時的那個值作為下次遞迴呼叫的基!!!每個進行遞迴呼叫可以確定乙個基數字置(將基數擺到正確位置)

a[i] = temp;//temp=a[left],交換a[i]與a[left]的值,非常有靈性

quicksort(left, i - 1);

quicksort(i + 1, right);//遞迴

return;

}int main()

歸併c++ 思路是二分至乙個或兩個元素陣列,然後排序[傳送門](

#include using namespace std;

void merge(int *data,int start,int end,int *result)

while(left_index < start + left_length)//左邊多

result[result_index++] = data[left_index++];

while(right_index < end+1)//右邊多。

result[result_index++] = data[right_index++];

}void merge_sort(int *data, int start, int end, int *result)

return;

}else if(0 == end - start)//如果只有乙個元素,則不用排序

return;

else

}int main()

; const int length = 8;

int result[length];

cout << "before sorted:" << endl;

for(int i = 0;i < length;++i)

cout << data[i] << " ";

cout << endl;

cout << "after sorted:" << endl;

merge_sort(data,0,length-1,result);

for(int i = 0;i < length;++i)

cout << data[i] << " ";

cout << endl;

return 0;

}

歸併排序與快速排序

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

快速排序與歸併排序

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

歸併排序與快速排序

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