推荐慕课网,刘宇波老师《算法与数据结构》
链接:http://coding.imooc.com/class/71.html
mergesort 课堂笔记
/* */
#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]);
}
mergesort
最新推荐文章于 2024-03-13 19:46:50 发布