美文网首页
C语言-归并排序法

C语言-归并排序法

作者: MonkeyHeng | 来源:发表于2016-02-10 17:40 被阅读68次
#include <stdio.h>  
#include <stdlib.h>  
  
void splitArrays();  
void sortArrays(int num[], int start, int mid, int end);  
  
int main(int argc, const char * argv[])  
{  
    int num_really[11];  
    for (int i = 0; i < 11; i++) {  
        num_really[i] = arc4random() % (90 - 10 + 1) + 10;  
    }  
    for (int i = 0; i < 11; i++) {  
        printf("%d ", num_really[i]);  
    }  
    printf("\n");  
    splitArrays(num_really, 0, 10);  
    for (int i = 0; i < 11; i++) {  
        printf("%d ", num_really[i]);  
    }  
    printf("\n");  
    return 0;  
}  
  
void splitArrays(int num[], int start, int end) {  
    int mid = (start + end) / 2;  
    if (mid != start) {  
        splitArrays(num, start, mid);  
        splitArrays(num, mid + 1, end);  
        sortArrays(num, start, mid, end);  
    } else {  
        sortArrays(num, start, mid, end);  
    }  
}  
  
void sortArrays(int num[], int start, int mid, int end) {  
      
    int num_left[mid - start + 1];  
    int num_right[end - mid];  
      
    //复制左子列  
    for (int i = 0; i < mid - start + 1; i++) {  
        num_left[i] = num[start + i];  
    }  
    //复制右子列  
    for (int i = 0; i < end - mid; i++) {  
        num_right[i] = num[mid + 1 + i];  
    }  
      
    int l_start = 0;  
    int l_end = mid - start + 1;  
    int r_start = 0;  
    int r_end = end - mid;  
    int sign = start;  
      
    while (l_start < l_end && r_start < r_end) {  
        if (num_right[r_start] < num_left[l_start]) {  
            num[sign] = num_right[r_start];  
            r_start++;  
        } else {  
            num[sign] = num_left[l_start];  
            l_start++;  
        }  
        sign++;  
    }  
      
    //对于子列最后几个的处理  
    if (l_start == l_end) {  
        for (r_start; r_start < r_end; r_start++) {  
            num[sign] = num_right[r_start];  
            sign++;  
        }  
    } else if (r_start == r_end) {  
        for (l_start; l_start < l_end; l_start++) {  
            num[sign] = num_left[l_start];  
            sign++;  
        }  
    }  
}  

相关文章

  • 排序算法(插入排序、希尔排序、堆排序、归并排序)

    插入排序、希尔排序、堆排序、归并排序 --c语言实现 逐渐添加中....

  • C语言-归并排序法

  • 说说算法那些事-归并排序

    归并排序(mergeSort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and C...

  • 算法—排序篇2

    1、归并排序(Merging Sort) 归并排序(Merging Sort): 就是利用归并的思想实现排序⽅法....

  • 归并排序(二路归并排序)

    归并排序的思路 归并排序是通过“归并”操作完成排序的,将两个或者多个有序子表归并成一个子表。归并排序是“分治法”的...

  • 排序算法

    排序算法分类 排序算法常用主要有:冒泡排序法、快速排序法、选择排序法、插入排序法、堆排序法、归并排序法等几种。 ...

  • python实现归并算法

    归并排序是采用分治法的一个非常典型的应用,另一个可以采用分治法的是快速排序,归并算法比快速排序速度稍低。归并排序的...

  • 5.归并排序

    5.归并排序 5.1归并排序的思想和复杂度 归并排序思想 归并排序主要是分治法的思想,有自顶向下和自底向上的归并排...

  • C语言——归并排序

    数组划分为单一元素的子数组,这些子数组显然是有序的。每两个子数组合并成一个数组,直至合并为原来的数组大小

  • 归并排序(C语言)

    算法原理 假设序列共有n个元素,将序列每相邻两个数字进行归并操作(merge),形成floor(n/2)个序列,排...

网友评论

      本文标题:C语言-归并排序法

      本文链接:https://www.haomeiwen.com/subject/xrtukttx.html