C语言归并排序详解 用c语言交换2个变量



//划分待排序数据为左右两部分,比较左右两部分。存入临时数组

//将排序好的数据在临时数组中copy到原数组中

//

#include <stdio.h>

#include <stdlib.h>

#define MAX 10

void

print_array(int *array_test,unsigned int x)

{

unsigned int i;

for(i=0;i<x;i++)

{

printf(" %d ",array_test[i]);

}

printf("n");

}

static void

merge(int array[], int low, int mid, int high)

{

int i, k;

int *temp = (int *) malloc((high-low+1) * sizeof(int)); //申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

int begin1 = low; //左半边开始下标

int end1 = mid; //左半边结束下标

int begin2 = mid + 1; //右半边开始下标

int end2 = high; //右半边开始下标

printf("mid = %d",mid);

//由于begin1 end1 begin2 end2 中都有需要比较的元素,故需要 <=

for (k = 0; begin1 <= end1 && begin2 <= end2; k++) //比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

{

if(array[begin1]<array[begin2]) //左右两边分别比较,并且一次存入零时数组中

{

temp[k] = array[begin1++];

}

else

{

temp[k] = array[begin2++];

}

}

//由于begin1 end1 begin2 end2 中都有需要比较的元素,故需要 <=

while(begin1<=end1)//若第一个序列有剩余,直接拷贝出来粘到合并序列尾

{

temp[k++] = array[begin1++];

}
C语言归并排序详解 用c语言交换2个变量

while(begin2<=end2) //若第二个序列有剩余,直接拷贝出来粘到合并序列尾

{

temp[k++] = array[begin2++];

}

for (i = 0; i < (high-low+1); i++)//将排序好的序列拷贝回数组中

{

array[low+i] = temp[i];

}

printf("合并: ");

print_array(array,MAX);

free(temp);

}

void

merge_sort(int array[], unsigned int first, unsigned int last)

{

int mid = 0;

if(first<last)

{

mid = (first+last)/2;

merge_sort(array, first, mid);//划分左半部分

merge_sort(array, mid+1,last);//划分右半部分

merge(array,first,mid,last);//合并

}

}

int main(void)

{

int array_test[MAX] = {0,9,8,7,6,5,4,3,2,1};

printf("start: ");

print_array(array_test,MAX);

merge_sort(array_test,0,MAX-1);

printf("end: ");

print_array(array_test,MAX);

return 0;

}

  

爱华网本文地址 » http://www.aihuau.com/a/25101012/125997.html

更多阅读

扫描仪怎么用——扫描仪的使用方法详解 canon扫描仪使用方法

扫描仪怎么用——扫描仪的使用方法详解——简介扫描仪作为日常办公经常用到的工具,下面详解一下具体的使用方法,现在打印机也开始走向家庭了,而现在的打印机有不少都是一体机,有附带扫描以及复印传真等功能,下面一步步跟我来扫描吧。扫

北京联通公司套餐详解 北京联通4g套餐资费

上一文我写了《北京移动公司套餐详解》,所以现在就来写写在北京的另一大移动运营商北京联通公司的套餐情况。由于联通公司主要突出的就是其3G网路的优势,所以我仅将北京联通公司现在推出的3G套餐进行说明,希望对各位大大有所帮助。北

雅诗兰黛小棕瓶使用方法详解 雅诗兰黛小棕瓶用6年了

雅诗兰黛小棕瓶使用方法详解——简介雅诗兰黛小棕瓶,即特润修护肌透精华露,以完美的抗衰老功能见称,被视为雅诗兰黛的镇店之宝。别看它小小一瓶,要达到最佳的减龄效果,还真得注意这小棕瓶使用方法。雅诗兰黛小棕瓶使用方法详解——方法/

夏天来了,教你怎样在家制作雪糕,自制雪糕详解 如何自制雪糕

炎炎夏季,每到周末,是不是想惬意的在家吃支雪糕,躺在沙发上看本杂志,或者是猫在房间里吃冷饮,网上冲浪呢?那么学会自制雪糕,会使你的这种想法更具有趣味性哦,来,跟我一起学习如何在家自制雪糕吧。夏天来了,教你怎样在家制作雪糕,自制雪糕详解

广告联盟赚钱初识及如何加入详解 广告联盟骗局

广告联盟赚钱初识及如何加入详解——简介现在网络上出现的“广告联盟”,究竟是什么意思?传说的能赚钱到底是真是假?又有哪些广告联盟呢?下面,小编就和大家一一道来。广告联盟赚钱初识及如何加入详解——工具/原料电脑互联网广告联盟赚

声明:《C语言归并排序详解 用c语言交换2个变量》为网友龍爺分享!如侵犯到您的合法权益请联系我们删除