mergesort

来源:互联网 发布:php 通过域名获取ip 编辑:程序博客网 时间:2024/06/18 11:49
推荐慕课网,刘宇波老师《算法与数据结构》链接:http://coding.imooc.com/class/71.htmlmergesort 课堂笔记/* */#include <cstdio>#include <iostream>using namespace std;template<typename T>void merge(T arr[],int l,int mid,int r){    T *aux = new T[r-l+1];    for(int i = l; i <= r; i++)        aux[i-l] = arr[i];    int i = l, j = mid+1;    for(int k = l; k <= r; k++)    {        if(i > mid){ //左半部分元素处理完毕            arr[k] = aux[j-l];            j ++;        }        else if(j > r){ //右半部分元素处理完毕            arr[k] = aux[i-l];            i ++;        }        else if(aux[i-l] < aux[j-l]){ // 左半部分元素 < 右半部分元素            arr[k] = aux[i-l];            i ++;        }        else{ // 左半部分元素 >= 右半部分元素            arr[k] = aux[j-l];            j ++;        }    }    delete[] aux;}template<typename T>void mergesort(T arr[],int l,int r){    if(l >= r)        return ;    int mid = (r - l)/2 + l;    mergesort(arr,l,mid);    mergesort(arr,mid+1,r);    merge(arr,l,mid,r);}int main(){    int arr[] = {8,6,4,2,9,7,1,3,5};    int n = sizeof(arr)/sizeof(arr[0]);    mergesort(arr,0,n-1);    for(int i = 0; i < n; i++)        printf("%d ",arr[i]); }
原创粉丝点击