C语言怎么求最次小值,第三次小值

来源:百度知道 编辑:UC知道 时间:2024/05/15 23:44:38
先求最小值,再求第二小值,之后再第3

循环
找最小值
记下它的下标。

循环
不考虑上次找到的那个(下标)
找最小值
记下它的下标。

循环
不考虑上两次找到的(下标)
找最小值
记下它的下标。

这就是
先求最小值,再求第二小值,之后再第3

void main()
{
int a[10]={21,2,3,4,5,6,7,8,9,10};
int x1=0,x2=0,x3=0;
int a_min;
int i,n;
n=10;
a_min=a[0];
for (i=0;i<n;i++) if (a[i] <= a_min) { a_min=a[i]; x1=i;};
if (x1 != 0) {a_min = a[0];} else {a_min = a[1];};
for (i=0;i<n;i++) if (i != x1 && a[i] <= a_min) {a_min=a[i]; x2=i;};
for (i=0;i<n;i++) if (i != x1 && i != x2) {a_min = a[i]; break;};
for (i=0;i<n;i++) if (i != x1 && i != x2 && a[i] <= a_min) { a_min=a[i]; x3=i;};
printf("%d %d %d\n",a[x1],a[x2],a[x3]);
}

用冒泡排序

各种排序方法都可以
但是最好还是选择排序,可以每次遍历都选择一个最小值,然后从剩余的之间,再选择最小...

用分治算法

有没有重复的值啊?