鱼C论坛

 找回密码
 立即注册
查看: 2471|回复: 3

归并排序

[复制链接]
发表于 2018-5-21 22:41:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 啦啦啦奇妙 于 2018-5-21 22:53 编辑

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
#define MAXSIZE 100000


//实现递归,并把最后结果存放到 list1里
void merge(long *list1, int list_size1, long *list2, int list_size2 )
{
        int i, j, k , m;
        long temp[MAXSIZE];
        i = j = k = 0;
        while (i < list_size1 && j < list_size2)
        {
                if ( list1  <  list2[j])     //这里是数组1下标 i 的值 小于数值2下标 j 的值
                {
                        temp[k++] = list1[i++];
                }
                else
                {
                        temp[k++] = list2[j++];
                }
        }
        while (i < list_size1)
        {
                temp[k++] = list1[i++];
        }
        while (j < list_size2)
        {
                temp[k++] = list2[j++];
        }
        for (m = 0; m < (list_size1 + list_size2) ; m++)
        {
                list1[m++] = temp[m++];
        }
}

void mergesort(long a[], int n)
{
        if (n > 1)
        {
                long *list1 = a;
                int list_size1 = n / 2;
                long *list2 = a + n / 2;
                int list_size2 = n - list_size1;
                mergesort(list1, list_size1);
                mergesort(list2, list_size2);
                merge(list1, list_size1, list2, list_size2);
        }
}

int main()
{
        int n, i;
        printf("请输入要产生随机数的个数: ");
        scanf_s("%d", &n);
        long k[100000] = {};
        srand(unsigned int(time(NULL)));
        for (i = 0; i < n - 1; i++)
        {
                k = rand() % 100000 + 1;
        }
        int start = GetTickCount();
        mergesort(k, n);
        printf("排列的的顺序: ");
        for (i = 0; i < n - 1; i++)
        {
                printf("%ld ", k);
        }
        int end = GetTickCount();
        printf("\n");
        printf("排列所需的时间: %dms", end - start);
        getchar();
        getchar();
        return 0;
}


不能排序   我觉是函数调用了  我不知道咋写返回排序好的数组,后面打印的又是随机生成的k  我是跟着小甲鱼老师数据结构和算法教学里打的代码 基本一样 不知道错哪了

麻烦大佬们了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-5-21 22:41:37 | 显示全部楼层
并不能排序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 10:35:09 | 显示全部楼层
  1. if ( list1  <  list2[j])     //这里是数组1下标 i 的值 小于数值2下标 j 的值
复制代码


这里少打了东西,应该是
  1. if ( list1[i]  <  list2[j])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 11:24:39 | 显示全部楼层
我的个龟龟18年的帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 16:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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