归并排序

来源:互联网 发布:htconemini知乎 编辑:程序博客网 时间:2024/06/06 03:42

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。



#include <cstdio>#include <iostream>using namespace std;void merge(int *A, int left, int mid, int right){int ll=mid-left+1, rl=right-mid, i;int L[ll+1], R[rl+1];for(i=0; i<ll; i++)L[i]=A[left+i];for(i=0; i<rl; i++)R[i]=A[mid+i+1];L[ll]=32767;R[rl]=32767;ll=0;rl=0;for(i=0; i<right-left+1; i++){if(L[ll]<R[rl]){A[left+i]=L[ll];ll++;}else{A[left+i]=R[rl];rl++; }}}void merge_sort(int *A, int left, int right){if(left<right){int mid = (left+right)/2;merge_sort(A,left,mid);merge_sort(A,mid+1,right);merge(A,left,mid,right);}}int main(){int A[500];int lens,i;cin>>lens;for(i=0;i<lens;i++)cin>>A[i];merge_sort(A, 0, lens-1);for(i=0;i<lens;i++)printf("%d ",A[i]);return 0;}


原创粉丝点击