#include <bits/stdC++.h>
using namespace std;
int temp[100001];
void marge(int line[],int L,int mid,int R){
int i = L, j = mid + 1;
int m = mid, n = R;
int k = 0;
// printf("%d %d\n",L,R);
while (i <= m && j <= n)
{
//当集合i的元素更小 先排i
if (line[i] <= line[j])
temp[k++] = line[i++];
else
temp[k++] = line[j++];
}
//当i集合有剩余的元素
while (i <= m)
temp[k++] = line[i++];
//当i集合有剩余的元素
while (j <= n)
temp[k++] = line[j++];
//将临时的temp容器中的元素返回到line中的相对位置
for (i = 0; i < k; i++)
line[L + i] = temp[i];
}
void sort(int line[], int L,int R){
if(L < R){
//位向左移动一位 相当于 除以2 或者是减1除2
int mid = (L + R) >> 1;
//不断的前后 分段 直到 不满足L < R
sort(line,L,mid);
sort(line,mid + 1,R);
marge(line,L,mid,R);
}
}
int main(int argc, char const *argv[]) {
int n;
printf("请输入数列长度:");
scanf("%d",&n);
int line[n];
printf("请输入%d个元素:\n",n);
for(int i = 0;i < n;i++)
scanf("%d",&line[i]);
sort(line,0,n-1);
for(int i = 0;i < n;i++)
printf("%d ",line[i]);
return 0;
}
邓俊辉算法训练营 归并排序
猜你喜欢
转载自blog.csdn.net/WX_1218639030/article/details/83098035
今日推荐
周排行