数组归并排序算法的一种实现
来源:互联网 发布:nba奇葩数据 编辑:程序博客网 时间:2024/05/16 06:29
归并排序算法是分治思想的一种实现。主要思想是,把一个数组分成两个子数组,分别排好序,再合并到一起,成为一个排好序的数组。具体实现的时候用到了递归,递归的先分再治。
#include <stdio.h>
#include <stdlib.h>
/*合并两个排序好的数组*/
void merge(int* array, int* a, const int start, const int mid, const int end)
{
int p=start;
int p1=start;
int p2=mid+1;
while((p1<=mid)&&(p2<=end))
{
if(array[p1]<array[p2])
{
a[p++]= array[p1++];
}
else
{
a[p++]= array[p2++];
}
}
while(p1<=mid)
{
a[p++]=array[p1++];
}
while(p2<=end)
{
a[p++]=array[p2++];
}
for(p=start;p<=end;p++)
{
array[p]=a[p];
}
}
/*归并排序的主例程*/
void merge_sort(int* array, int* a, const int start, const int end)
{
int mid=(start+end)/2;
if(start<end)
{
merge_sort(array,a,start,mid);
merge_sort(array,a,mid+1,end);
merge(array,a,start,mid,end);
}
else
{
return;
}
}
/*测试例程*/
int main()
{
int i=0;
int a[10]={9,8,7,6,5,4,3,2,1,0};
/*打印归并排序后的数组*/
printf("Before merge sorting:/n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("/n");
int* b=(int*)malloc(sizeof(a));/*临时数组,空间大小和要排序的数组相同*/
merge_sort(a,b,0,9);/*排序*/
free(b);/*释放临时空间*/
/*打印归并排序后的数组*/
printf("After merge sorting:/n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("/n");
/*防止控制台马上退出*/
scanf("%d",&i);
return 0;
}
- 数组归并排序算法的一种实现
- 归并排序的一种实现
- 一种常用的归并排序算法--归并排序
- 归并排序的一种c++实现
- 一种基于归并排序及随机数生成器对一个给定数组进行随机排列的算法
- 归并排序的算法实现
- 归并排序算法的实现
- 归并排序算法的实现
- 归并排序的算法实现
- 归并排序的算法实现
- 归并排序算法的实现
- 每天一种算法-归并排序
- 一种高效率的排序方法-归并排序的实现(主要解决matlab中多维数组排序的问题)
- [排序算法]--归并排序的Java实现
- 排序算法的java实现-归并排序
- 一种数组排序算法
- 归并排序算法实现
- 归并排序算法实现
- 安装php和mysql和apache
- Linux系统下ifconfig命令使用及结果分析
- vi命令
- 立即行动的七个方法
- 二叉树前序、中序和后序非递归遍历的方法
- 数组归并排序算法的一种实现
- Linux下Socket编程
- 在openGL中实现RayPicking
- 安装oracle遇到的故障
- shell externsion DLL模块
- 圈复杂度计算
- 线程池的介绍及简单实现
- ComboBox Item项
- so