如何找数组中的最小值和次小值

怎么找数组中的最小值和次小值


随机产生10个整数放入一维数组,找出其中的最小值和次小值输出,并把它们的位置调换


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


int main()
{
int n,i;
int min1,min2;
#define maxsize 10
int data[maxsize];
srand((unsigned)time(NULL));
printf("产生10个随机数为:\n");
for(i=0;i<10;i++)
data[i]=rand()%90+10;
for(i=0;i<10;i++)
printf("%d ",data[i]);
printf("\t");



return 0;
}


这里产生了  然后怎么找次小值
------解决方案--------------------

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

int main()
{
    int a[10];
    int i;
    int * p; // always point to min
    int * q; // always point to second min
    int tmp;

    for (i = 0; i < 10; i++)
        a[i] = rand() % 100;
    for (i = 0; i < 10; i++)
        printf("%d\n", a[i]);

    if (a[0] < a[1]) // assume a[0] is min, a[1] is second min
        p = a, q = a + 1;
    else // otherwise, a[1] is min, a[0] is second min
        p = a + 1, q = a;

    for (i = 2; i < 10; i++)
    {
        if (a[i] < *p) // less than min
        {
            q = p; // old min is new second min
            p = a + i; // a[i] is new min
        }
        else if (a[i] < *q) // greater than min but less than second min
        {
            q = a + i; // a[i] is new second min
        }
        else // greater than second min
        {
            ; // we do nothing here
        }
    }

    printf("\nmin is: %d\n", *p);
    printf("second min is: %d\n\n", *q);

    tmp = *p;
    *p = *q;
    *q = tmp;

    for (i = 0; i < 10; i++)
        printf("%d\n", a[i]);

    return 0;
}

------解决方案--------------------
两次冒泡即可
#include <stdio.h>

int main(int argc, char **argv)
{
int num[10] = {12, 15, 4, 43, 23, 8, 1, 25, 64,10};
int i, j, tmp;

for(i = 0; i < 2; i++){
for(j = 0; j < 9; j++){
if(num[j] < num[j+1]){
tmp = num[j];
num[j] = num[j+1];
num[j+1] = tmp;
}
}
}

printf("the smallest is %d, the second small is %d\r\n", 
num[9], num[8]);
}

------解决方案--------------------
引用:

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

int main()
{
    int a[10];
    int i;
    int * p; // always point to min
    int * q; // always point to second min
    int tmp;

    for (i = 0; i < 10; i++)
        a[i] = rand() % 100;
    for (i = 0; i < 10; i++)
        printf("%d\n", a[i]);

    if (a[0] < a[1]) // assume a[0] is min, a[1] is second min
        p = a, q = a + 1;