c语言,如何优化程序运行时间
开课吧学习平台做闯关题,这个闯不过去了,有大神给优化一下吗,总是提醒运行超出限制时间, 在其他平台这个可以没问题。这是题干:给予 10 个乱序输入的整数。你需要(任选一种排序方法)将它们从大到小进行排序后输出;
#include <stdio.h>
void swap(int *a,int *b)
{
int k;
k = *a;
*a = *b;
*b = k;
}
int main() {
int n = 10;
int numbers;
int i;
int j;
// 读入给定的数字
for (i = 0; i < n ;i++)
{
scanf("%d", &numbers);
}
for(i = 0;i < n; i++)
{
for(j = 0;j < n-i;j++)
{
if(numbers < numbers)
{
swap(&numbers,&numbers);
}
}
}
for(i = 0;i < n;i++)
{
printf("%d",numbers);
if(i != (n-1))
{
printf(" "); //最后一个整数后面不能有空格
}
}
return 0;
}
你这个排序算法不行,优化也没多大意义,改算法吧
直接用qsort库函数多省心 aammoo 发表于 2020-10-27 20:58
你这个排序算法不行,优化也没多大意义,改算法吧
这只有10个数,根据经验,小于100个数我都通通冒泡,效率最高。lz这估计是平台bug,编译出来死循环了。 本帖最后由 剑舞 于 2020-10-28 08:19 编辑
{:lol:} {:lol:} {:lol:} aammoo 发表于 2020-10-27 20:58
你这个排序算法不行,优化也没多大意义,改算法吧
对,改变算法,今天尝试一下,不用冒泡法 冒泡的最差情况是n!
不考虑开销,试一试用链表插值排,
初始化链表o1,
排序,最差情况,n*n,n个数据,循环n遍
输出o1
改变了算法就行了
下面代码替代冒泡法
for(i = 0;i < n; i++)
{
max = numbers;
for(j = i;j < n;j++)
{
if(max < numbers)
{
max = numbers;
index = j;
}
if(j == n-1 && max == numbers )
{
swap(&numbers,&numbers);
}
}
} zyqcome 发表于 2020-10-28 11:50
冒泡的最差情况是n!
不考虑开销,试一试用链表插值排,
初始化链表o1,
小白还写不出来链表{:lol:} ,请朋友不吝赐教{:handshake:} Himem 发表于 2020-10-27 21:02
直接用qsort库函数多省心
厉害,函数后面在研究研究你说的这个函数 圈养的野马 发表于 2020-10-29 18:12
小白还写不出来链表 ,请朋友不吝赐教
你把它想复杂了,就是串在一起的 struct 用指针连起来
这样用的的好处是不会像数组排,需要移动数组
麻烦的是,可能需要一个指针来记录最小的一个,
不记录的话,最后需要一个递归调用的输出 本帖最后由 csq463276932 于 2020-10-30 10:35 编辑
楼主位的程序应该有问题。
for(i = 0;i < n; i++)
{
for(j = 0;j < n-i;j++)
{
if(numbers < numbers)
{
swap(&numbers,&numbers);
}
}
}
__________________________________________
要改成下面这样才能正确输出数据。
for(i = 0;i < n; i++)
{
for(j = 0;j < n-1-i;j++)
{
if(numbers < numbers)
{
swap(&numbers,&numbers);
}
}
} for(i = 0; i < n; i++)
{
for(j =i+1; j < n; j++)
{
if(numbers <numbers)
{
swap(&numbers, &numbers);
}
}
} csq463276932 发表于 2020-10-30 10:23
楼主位的程序应该有问题。
for(i = 0;i < n; i++)
{
{:handshake:} 对,用你写的这两个确实能行,看来不是算法的问题呢,这个先把小的往后挪 csq463276932 发表于 2020-10-30 17:13
for(i = 0; i < n; i++)
{
for(j =i+1; j < n; j++)
这个是先把大的往前面挪 zyqcome 发表于 2020-10-30 08:54
你把它想复杂了,就是串在一起的 struct 用指针连起来
这样用的的好处是不会像数组排,需要移动数组
哦 那我后面把指针链表再学习一下回来在研究研究{:handshake:}
页:
[1]