c语言之合并排序实现
2017-09-09 14:11
190 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//将两个有序序列合并为一个有序序列
void merge(int a[],int left_pos,int right_pos)
{
int temp[right_pos-left_pos+1];
int mid=(left_pos+right_pos)/2;
int left=left_pos,right=mid+1;
int count=0;
while(left<=mid&&right<=right_pos)
{
if(a[left]<=a[right])
{
temp[count++]=a[left++];
}
else
{
temp[count++]=a[right++];
}
}
while(left<=mid)
{
temp[count++]=a[left++];
}
while(right<=right_pos)
{
temp[count++]=a[right++];
}
memcpy(&a[left_pos],temp,sizeof(temp));
}
//合并排序
void merge_sort(int a[],int left_pos,int right_pos)
{
if(left_pos<right_pos)
{
//一分为二
int mid=(left_pos+right_pos)/2;
//左合并
merge_sort(a,left_pos,mid);
//右合并
merge_sort(a,mid+1,right_pos);
//合而为一
merge(a,left_pos,right_pos);
}
}
int main()
{
//测试用例
int a[]={331,34,43,64,75,43,7,4234,876,34};
//合并排序
merge_sort(a,0,9);
//打印结果
int i;
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
system("pause");
return 1;
}
#include <stdlib.h>
#include <string.h>
//将两个有序序列合并为一个有序序列
void merge(int a[],int left_pos,int right_pos)
{
int temp[right_pos-left_pos+1];
int mid=(left_pos+right_pos)/2;
int left=left_pos,right=mid+1;
int count=0;
while(left<=mid&&right<=right_pos)
{
if(a[left]<=a[right])
{
temp[count++]=a[left++];
}
else
{
temp[count++]=a[right++];
}
}
while(left<=mid)
{
temp[count++]=a[left++];
}
while(right<=right_pos)
{
temp[count++]=a[right++];
}
memcpy(&a[left_pos],temp,sizeof(temp));
}
//合并排序
void merge_sort(int a[],int left_pos,int right_pos)
{
if(left_pos<right_pos)
{
//一分为二
int mid=(left_pos+right_pos)/2;
//左合并
merge_sort(a,left_pos,mid);
//右合并
merge_sort(a,mid+1,right_pos);
//合而为一
merge(a,left_pos,right_pos);
}
}
int main()
{
//测试用例
int a[]={331,34,43,64,75,43,7,4234,876,34};
//合并排序
merge_sort(a,0,9);
//打印结果
int i;
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
system("pause");
return 1;
}
相关文章推荐
- 合并排序的c语言实现
- 合并排序的c语言实现
- C语言实现合并排序
- 合并排序(C语言实现)
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- C语言实现在数组A上有序合并数组B的方法
- 几种常见的排序方法(C语言实现)
- C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)
- 排序(6)---------归并排序(C语言实现)
- 插入排序(C语言实现)
- 插入排序的C语言实现
- 堆排序的C语言实现
- 数据结构中的排序查找算法(C语言实现)
- c语言实现 选择排序 冒泡排序
- JAVA实现合并两个排序的链表(《剑指offer》)
- C语言实现几大典型排序
- c语言实现选择排序
- C语言——合并两个递增排序链表
- JavaScript中数组的合并以及排序实现示例