码迷,mamicode.com
首页 > 编程语言 > 详细

C语言:归并排序

时间:2017-12-23 14:17:28      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:turn   c语言   sort   排序   pre   总结   color   class   body   

归并排序(C语言)。

先上代码,理论会后面一起总结。

1. 递归

 

2. 非递归

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

void merge_sort(int* arr, int length)
{
    int step = 1; //区间步长
    int l[length], r[length]; //gcc, 两个临时数组,分别表示待归并的两个区间
    //int l[100], r[100]; //vc
    while(step < length)
    {
        int startloc = 0; //归并区间的开始下标
        while(startloc < length - step)
        {
            //
            int len_l, len_r; //左右待归并区间的长度
            len_l = len_r = step;
            memcpy(l, arr + startloc, sizeof(int) * len_l);
            if(startloc + 2 * step > length)
            {
                len_r = length - startloc - step;
            }
            memcpy(r, arr + startloc + step, sizeof(int) * len_r);
            //
            int i = 0, j = 0, k = startloc;
            while(i < len_l && j < len_r)
            {
                arr[k++] = l[i] < r[j] ? l[i++] : r[j++];
            }
            while(i < len_l)
            {
                arr[k++] = l[i++];
            }
            startloc += 2 * step;
        }
        step *= 2;
    }
}

int main()
{
    int arr[11] = {-1, 2, 4, -12, 4, 0, 0, 12, 23, -4, 7000};
    merge_sort(arr, 11);
    for(int i = 0; i < 11; ++i)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

 

C语言:归并排序

标签:turn   c语言   sort   排序   pre   总结   color   class   body   

原文地址:http://www.cnblogs.com/plain8/p/8093052.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!