在C中查找数组中最小数字的算法

时间:2015-12-18 17:47:15

标签: c algorithm

我已经四处搜索了,但我找不到任何有关我问题的内容。

我想在C中创建一个算法,找到数组中可以容纳10个值的最小数字。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main(void) {
    int array[10];
    int i, smaller;

    srand(time(NULL));

    for (i = 0; i < 10; i++) {
        array[i] = rand() % 100 + 1;
    }

    // Find smaller number in the array
    for (i = 0; i < 10; i++) {
        ...
    }

    printf("Smaller: %d\n", smaller);
    return 0;
}

有关如何做的任何提示?

3 个答案:

答案 0 :(得分:7)

将数组的第一个元素分配给smaller

smaller = array[0];

使用i = 1开始循环,并将元素与smaller进行比较。如果smaller大于任何array元素,则将其替换为该元素,否则将其保留为原样。

答案 1 :(得分:2)

由于你的数组很小并且没有排序,你可以像这样进行简单的O(n)线性搜索:

int main(void) 
{
    int array[10];

    srand(time(NULL));

    int i;
    for (i = 0; i < 10; i++)array[i] = rand() % 100 + 1;

    int smallestSoFar=array[0];

    for (i = 1; i < 10; i++)  if(smallestSoFar>array[i]) smallestSoFar=array[i];


    printf("Smallest value: %d\n", smallestSoFar);
    return 0;
}

发生的事情是你假设数组中的第一个元素确实是最小的。然后你逐个迭代整个数组,如果你看到一个较小的值,就改变主意;

答案 2 :(得分:1)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*
    follow good practice and never hardcode an array
    use symbolic names instead that way if you have to
    increase or decrease the size of the array you only
    have to change the value here
*/
#define NO_OF_ELEMENTS 10

int main(void)
{
    // declare and initialize all elements to 0
    int array[NO_OF_ELEMENTS] = {0};
    int smallest = 0, largest = 0, i = 0;

    srand(time(NULL));

    for(i = 0; i < NO_OF_ELEMENTS; i++)
    {
        array[i] = (rand() % 100) + 1;

        // Compare against each element as you go to find the largest
        if(largest < array[i])
        {
            largest = array[i];
        }

        printf("\nElement %d: %d", i, array[i]);
    }

    // assume smallest element is in the first position
    smallest = array[0];

    for(i = 0; i < NO_OF_ELEMENTS; i++)
    {
        if(smallest > array[i])
        {
            smallest = array[i];
        }
    }

    printf("\n\nSmallest element in array is: %d", smallest);
    printf("\nLargest element in array is: %d", largest);

    getchar();

    return 0;
}

该程序应该帮助你,它将返回数组中最大和最小的值。