吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1544|回复: 11
收起左侧

[其他转载] (C语言)小白自己写了个归并排序

  [复制链接]
段子界的孔子 发表于 2021-3-31 18:14
本帖最后由 段子界的孔子 于 2021-3-31 18:26 编辑

[C] 纯文本查看 复制代码
void merge_sort(int arr[], int len) {
/*
     step2-用于终止递归条件
*/
    if(len <= 2) {
        if (len == 2 && arr[0] > arr[1])
            swap(&arr[0], &arr[1]);
        return;

    }

/*
     step1-分段:mor用于求分段中值,以mor为中值分成两小段段进入递归
*/
    int mor = len/2;
    //  左半段递归
    merge_sort(&arr[0], mor);
    //  右半段递归
    merge_sort(&arr[mor], len - mor);

/*
     step3-整合:将两段有序序列整合排序成一段有序序列
*/
    //  把arr中整段数据克隆到b
    int *b = (int *) malloc(len * sizeof(int));
    for (int i = 0; i < len; ++i) {
        b[i] = arr[i];
    }
    // 以b作为参考数组,把arr大段排序:j 为b[]左半端指针, k 为b[]的右半段指针, n 为arr排序位指针;j的取值区间[0,mor-1],k的取值区间[mor,len-1]
    int j = 0, k = mor;
    for (int i = 0; i < len; ++i) {
        if (j < mor && k < len)      // 如果两段中,都存在未排列数组,则把首位较小的数给安排上
            arr[i] = b[j] < b[k] ? b[j++] : b[k++];
        else  // 否则,则另一段的未排列数据直接补上
            arr[i] = (j < mor) ? b[j++] : b[k++];
    }
    free(b);
}

我就想知晓这算不算是归并排序,因为备考用到的,代码如有错误,还请大佬不吝赐教哈

免费评分

参与人数 1吾爱币 +5 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

QingYi. 发表于 2021-3-31 19:05
len 直接/2?
len>>=1
 楼主| 段子界的孔子 发表于 2021-3-31 21:35
本帖最后由 段子界的孔子 于 2021-3-31 21:47 编辑
QingYi. 发表于 2021-3-31 19:05
len 直接/2?
len>>=1

对于位运算我是真的不咋会,哈哈
不过这里我斟酌过,参考某些民间代码也是简单粗暴/2然后我就跟风了。主要是想省代码
mor用来求小于len的2的n次幂,之前的版本写是

mor = 2;
while (mor * 2 < len)
mor *=2 ;

Mr.jed 发表于 2021-3-31 18:27
我爱大脸娃 发表于 2021-3-31 18:20
你好,能带我入门么?  现在啥也看不懂  都不知道从哪开始学习。

你可以从网上的一些,免费课程开始学习。
 楼主| 段子界的孔子 发表于 2021-3-31 18:48
我爱大脸娃 发表于 2021-3-31 18:20
你好,能带我入门么?  现在啥也看不懂  都不知道从哪开始学习。

b站就挺多教程的,可以去看看
反转星球 发表于 2021-3-31 20:21
这是用什么IDE写的呀
zjf919 发表于 2021-3-31 20:26
谢谢大神分享!学习一下!
啊哈啊 发表于 2021-3-31 20:49
加油!!
kof888 发表于 2021-3-31 20:51
这个循环里,++i和i++应该是一样的吧,
 楼主| 段子界的孔子 发表于 2021-3-31 21:38
反转星球 发表于 2021-3-31 20:21
这是用什么IDE写的呀

图方便给用的Clion,但代码样式风格是论坛的,不太会刷格式
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 18:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表