highlong的个人博客分享 http://blog.sciencenet.cn/u/highlong

博文

分治法的应用之一:合并排序算法

已有 4544 次阅读 2011-2-6 22:28 |个人分类:未分类|系统分类:科研笔记

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

void merge(int a[], int p, int q, int r)
{
int i, j, k;
int *tmp = (int *)malloc((r - p + 1) * sizeof(int));
i = p;
j = q + 1;
k = 0;
while(i <= q && j <= r)
{
if(a[i] < a[j]) 
{
tmp[k] = a[i++];
else
{
tmp[k] = a[j++];
}
k++;
}
while(i <= q)
{
tmp[k++] = a[i++];
}
while(j <= r) 
{
tmp[k++] = a[j++];
}
for (i = 0; i < k; i++) 
{
a[p + i] = tmp[i];
}
    free(tmp);
}


void merge_sort(int a[], int p, int r)
{
if(p < r) 
{
int q = (p + r) / 2;     //分解成两组
merge_sort(a, p, q);     //递归的对前一组排序
merge_sort(a, q + 1, r); //递归的对后一组排序
merge(a, p, q, r);       //合并结果
}
}

void main()
{
int A[10] = {5, 2, 4, 7, 1, 3, 2, 6, 6, 20};
    merge_sort(A, 0, 9);
for (int i=0; i<10; i++)
{
printf("%d ", A[i]);
}
printf("nn");
}


https://blog.sciencenet.cn/blog-298201-410739.html

上一篇:严蔚敏《数据结构(C语言版)》第二章代码
收藏 IP: 218.76.65.*| 热度|

0

发表评论 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-6 22:04

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部