|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 我是跟着小甲鱼老师数据结构和算法教学里打的代码 基本一样 不知道错哪了
麻烦大佬们了 |
|