C编程:创建10元素数组,Bubblesort算法,返回数组的最小值和最大值

C编程:创建10元素数组,Bubblesort算法,返回数组的最小值和最大值,c,arrays,sorting,for-loop,bubble-sort,C,Arrays,Sorting,For Loop,Bubble Sort,因此,实际问题只是要求接受一个10个元素的数组并返回最小值和最大值。我非常习惯于在Matlab/GNUoctave中处理数组,但今天是我第一次在C中处理数组 无论如何,我想我想知道的是,是否有比像我一样使用for循环更好的方法来输入数组 此外,在数组排序之前,我不知道如何让我的bubblesort if块保持循环。我尝试了“while(;)”,但没有成功,我开始寻找布尔变量,但没有找到我想要的 此外,如果有更好的方法来做这一切,我在这里学习。我不知道,也许泡泡运动在这方面很蠢。我想是的。可能需要

因此,实际问题只是要求接受一个10个元素的数组并返回最小值和最大值。我非常习惯于在Matlab/GNUoctave中处理数组,但今天是我第一次在C中处理数组

无论如何,我想我想知道的是,是否有比像我一样使用for循环更好的方法来输入数组

此外,在数组排序之前,我不知道如何让我的bubblesort if块保持循环。我尝试了“while(;)”,但没有成功,我开始寻找布尔变量,但没有找到我想要的

此外,如果有更好的方法来做这一切,我在这里学习。我不知道,也许泡泡运动在这方面很蠢。我想是的。可能需要很长时间才能获得更长的阵列

#include <stdio.h>


int main()
{
    int a[10];
    int i;
    int k;
    int temp;   


    for (i=0; i < 10; i++)
    {
        printf("Enter an integer: ");
        scanf("%d",&a[i]);
    }

    for (i=0; i < 10; i++)
    {
        if (a[i] > a[i+1])
        {
            temp = a[i];
            a[i] = a[i+1];
            a[i+1] = temp;
        }
    }
    printf("Smallest = %i\nLargest = %i\n",a[0],a[9]);
    return 0;
}
#包括
int main()
{
INTA[10];
int i;
int k;
内部温度;
对于(i=0;i<10;i++)
{
printf(“输入一个整数:”);
scanf(“%d”、&a[i]);
}
对于(i=0;i<10;i++)
{
如果(a[i]>a[i+1])
{
温度=a[i];
a[i]=a[i+1];
a[i+1]=温度;
}
}
printf(“最小的=%i\n最大的=%i\n”,a[0],a[9]);
返回0;
}

我发现您的代码存在两个直接的问题(a)

首先,冒泡排序通常需要多次传递才能对整个集合进行排序。每次传递“气泡”单个项目到其正确位置

第二个问题是,在比较项目
n
n+1
时,
n
在十元素数组中最好不要超过八个

考虑到这两件事,最简单(不一定是最有效)的冒泡排序是:

for (int pass = 1; pass <= 10; ++pass) {
    for (int idx = 0; idx < 9; ++idx) {
        if (a[idx] > a[idx + 1]) {
            int temp = a[idx];
            a[idx] = a[idx + 1];
            a[idx + 1] = temp;
        }
    }
}
从那以后,我就把它分开了,虽然最好有健壮的代码,但对于教育代码来说,这通常是不必要的。但是,你最好尽早养成这种习惯。

气泡排序具有时间复杂性,并且不需要执行此任务。此外,冒泡排序的实现也是错误的。您将需要一个外部
for循环
,该循环运行
10次(或在未交换任何元素时终止)。
我将为您的问题概述一种更简单的方法

smallest = INF  //very large value
largest = -INF  //very small value
for (i=0; i < 10; i++) {
    smallest  = min(smallest, a[i])
    largest = max(largest, a[i])
}
minimate=INF//非常大的值
最大=-INF//非常小的值
对于(i=0;i<10;i++){
最小值=最小值(最小值,a[i])
最大=最大(最大,a[i])
}
int minVal = a[0], maxVal = a[0];
for (int idx = 1; idx < 10; ++idx) {
    if (a[idx] < minVal) minVal = a[idx];
    if (a[idx] > maxVal) maxVal = a[idx];
}
// minVal and maxVal now hold the minimum and maximum value respectively.
for (int i = 0; i < 10; i++) {
    printf("Enter an integer: ");
    if (scanf("%d", &a[i]) != 1) {
        puts("Invalid data in input stream, will exit.");
        return 1;
    }
}
smallest = INF  //very large value
largest = -INF  //very small value
for (i=0; i < 10; i++) {
    smallest  = min(smallest, a[i])
    largest = max(largest, a[i])
}