全部学习汇总: GitHub – GreyZhang/c_basic: little bits of c.
近期在学习C语言数据结构,看到了排序。我看得是一本国外的书籍,直接网上寻找到的一个英文版。内容比较简洁,讲解也算是调理清晰。
关于排序算法,书中只讲了三种:冒泡排序、选择排序和归并排序。前两个的实现其实还是比较简单的,第三个涉及到递归的算法有时候理解起来会稍微麻烦一些。但是一旦理服务器托管网解了似乎又觉得是豁然开朗,一切清晰简单。
一直没有写过归并排序的算法,今天用C语言实现了一个简单的通用版本。测试代码中只测试了一个简单的case。
使用中,借用了部分之前的代码,实现起来比较简单,因此这里只展示核心的排序算法代码以及测试的Test Case。
核心排序算法代码如下:
void mergesort(void *array, size_t num_elements,size_t element_size,
CMP_PROC_p_t cmp_proc)
{
int inx = 0;
int jnx = 0;
int knx = 0;
size_t lowHalf = 0;
size_t highHalf = 0;
BYTE_t *array1 = NULL;
BYTE_t *array2 = NULL;
void *tempArray;
if(num_elements > 1)
{
lowHalf = num_elements / 2;
highHalf = num_elements - lowHalf;
array1 = array;
array2 = array1 + lowHalf * element_size;
mergesort(array1,lowHalf,element_size,cmp_proc);
mergesort(array2,highHalf,element_size,cmp_proc);
}
else
{
lowHalf = 1;
服务器托管网 highHalf = 0;
array1 = array;
}
tempArray = CDA_malloc(num_elements * element_size);
while((inx
主函数部分的测试接口如下:
#include "stdio.h"
#include "mergesort.h"
int var1 = 5;
int var2 = 3;
int test_array[12] = {1,3,5,7,2,5,9,5,21,55,1,0};
int main(void)
{
int i = 0;
printf("value before sorted:n");
for(i = 0; i
编译与运行结果如下:
看起来排序算法应该问题不打了,但是有几个警告还需要处理一下。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
简体、繁体转换:ctrl + shift + f服务器托管网 服务器托管,北京服务器托管,服务器租用 htt服务器托管网p://www.fwqtg.net 机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net相关推荐: Vites…