归并排序

来源:互联网 发布:老虎 知乎 编辑:程序博客网 时间:2024/06/11 06:54

代码模板:

归并排序的主要思想就是对两组有序数据进行操作,初始时设置两个两个指针指向两组数据的第一个数据,进行比较,将小的那一个放进另一个数组,指针加一。这里我们遇到的是一组无序的数据,所以我们要对其进行二分,然后对二分的数据进行排序,递归进行,把mid左边的看做一组数据,右边看做一组数据,进行比较,将较小的放入另一个数组即可。   

#include<cstdio>#include<cstring>#include<iostream>#define N 500using namespace std;int a[N], b[N];void MergeSort(int left, int right){    if(right<left+2){        if(a[left]>a[right])            swap(a[left], a[right]);        return ;    }    int mid = (left+right)/2;    MergeSort(left, mid);    MergeSort(mid+1, right);    int i = left, j = mid+1;    for(int k = left; k<=right; k++){        if(i<=mid && ((j==right+1) || a[i]<=a[j])){            b[k] = a[i];            i++;        }        else{            b[k] = a[j];            j++;        }    }    for(int k = left; k<=right; k++)        a[k] = b[k];}int main(){    int n ;    scanf("%d", &n);    for(int i = 0; i<n; i++)        scanf("%d", &a[i]);    MergeSort(0,n-1);    for(int i = 0; i<n; i++)        printf("%d ", a[i]);    return 0;}

0 0
原创粉丝点击