C语言归并算法

来源:互联网 发布:js中基本数据类型 编辑:程序博客网 时间:2024/05/16 01:20
#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++;        }    }}

0 0
原创粉丝点击