gpt4 book ai didi

c - 使用 if-else 对 3 个值进行排序的最有效的 C 程序是什么?

转载 作者:行者123 更新时间:2023-11-30 19:27:50 25 4
gpt4 key购买 nike

让我们考虑一下,我需要开发一个程序来读取 3 个值,并仅使用 if-else 结构按升序打印这些值。

请注意,我了解经典的排序算法。但这里的重点是如何使用简单的条件结构开发 3 个值的排序算法。

我已经实现了2个版本。我需要确定哪一个最有效以及为什么。让我们考虑效率与程序所花费的时间成反比。

我认为衡量这一点的一种方法是计算必要的最小和最大比较次数。也就是说,评估最好和最坏的情况。但两种算法中 if 中的条件数量不同。

让我们忽略 printf 所花费的时间。

版本 1:

#include <stdio.h>

int main()
{
int v1,v2,v3;

printf("Provide 3 values:\n");
scanf("%d%d%d",&v1,&v2,&v3);

if ( v1 <= v2 && v1 <= v3){
if( v2 <= v3 ){
printf("%d, %d, %d\n", v1, v2, v3);
}
else{
printf("%d, %d, %d\n", v1, v3, v2);
}
}
else{
if(v2 <= v1 && v2 <= v3){
if(v1 <= v3){
printf("%d, %d, %d\n", v2, v1, v3);
}
else{
printf("%d, %d, %d\n", v2, v3, v1);
}
}
else{
if(v2 <= v1){
printf("%d, %d, %d\n", v3, v2, v1);
}
else{
printf("%d, %d, %d\n", v3, v1, v2);
}
}
}

return 0;
}

版本 2

#include <stdio.h>

int main()
{
int v1,v2,v3;

printf("Provide 3 values:\n");
scanf("%d%d%d",&v1,&v2,&v3);

if ( v1 <= v2){
if( v1 <= v3 ){
if(v2 <= v3){
printf("%d, %d, %d\n", v1, v2, v3);
}
else{
printf("%d, %d, %d\n", v1, v3, v2);
}
}
else{
printf("%d, %d, %d\n", v3, v1, v2);
}
}
else{
if(v2 <= v3){
if(v1 <= v3){
printf("%d, %d, %d\n", v2, v1, v3);
}
else{
printf("%d, %d, %d\n", v2, v3, v1);
}
}
else{
printf("%d, %d, %d\n", v3, v2, v1);
}
}

return 0;
}

是否有其他程序(仅使用 if-else)比这两个程序更有效?

@rcgldr Can you show the code that implement your idea?

版本3

int main()
{
int v1,v2,v3;

printf("Provide 3 values:\n");
scanf("%d%d%d",&v1,&v2,&v3);

if(v1 <= v2){
if(v2 <= v3){
printf("%d, %d, %d\n", v1, v2, v3);
}else if(v1 <= v3 ){
printf("%d, %d, %d\n", v1, v3, v2);
}else{
printf("%d, %d, %d\n", v3, v1, v2);
}
}
else{
if(v1 <= v3){
printf("%d, %d, %d\n", v2, v1, v3);
}else if(v2 <= v3){
printf("%d, %d, %d\n", v2, v3, v1);
}else{
printf("%d, %d, %d\n", v3, v2, v1);
}
}
return 0;
}

最佳答案

判断效率很困难,因为它严重依赖于您的 CPU 和编译器的优化器。

但是从理论上来说,对3个元素进行排序至少需要3次比较。 Sequence A036604具有大量元素的值。

显示了对 5 个元素进行排序的代码 here - 您可能会明白为什么这种排序不经常使用。

关于c - 使用 if-else 对 3 个值进行排序的最有效的 C 程序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55364204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com