sergin 发表于 2020-10-13 19:31

找出数组中第二大的数

#include <stdio.h>

void bubble(int * p, int len)
{
        int i, j, temp;
        for (i = 0; i < len; i++)
        {
                for (j = 0; j < len -i - 1; j++)
                {
                        if (*(p+j) < *(p+j+1))
                        {
                                temp = *(p+j);
                                *(p+j) = *(p+j+1);
                                *(p+j+1) = temp;
                        }
                }
        }
        return;
}

int main(void)
{
        int a[] = {5, 100, 32, 45, 21, 67, 32, 68, 41, 99, 13, 71};
        int * p = a;
        int len = sizeof(a) / sizeof(a);

        bubble(p, len);

        printf("%d\n", *(p+1));

        return 0;
}

ciker_li 发表于 2020-10-13 19:47

排序选出第二个

跑得快有糖吃 发表于 2020-10-13 19:49

冒泡排序?学习了

PPZ丿皮皮智 发表于 2020-10-13 19:54

先用冒泡把所有数先从小到打排列好然后输出倒数第二个就好了

hearne 发表于 2020-10-13 19:59

先排序效率太低了吧,是最不经济的方法了

int getSecondMaxNumber(int *p , int n)
{
      int i , max , second;
      max = p;
      second = max;
      for(i = 1 ; i < n ; ++i) {
                if(p > max) {
                        second = max;
                        max = p;
                }
                else {
                        if(p > second)
                              second = p;
                }
      }
      return second;
}

yhcfsr 发表于 2020-10-13 20:10

本帖最后由 yhcfsr 于 2020-10-13 20:12 编辑

跑得快有糖吃 发表于 2020-10-13 19:49
冒泡排序?学习了
如果只想找第二大,不妨改成,for (i = 0; i < 2; i++)且 if (*(p+j) > *(p+j+1))
这样倒数第2个就是要找的数

ximen_qing 发表于 2020-10-13 20:24

没看懂楼主的帖子?

ytzyyjj 发表于 2020-10-13 20:39

厉害~~~学习一下

yzqhj 发表于 2020-10-13 21:48

c?优秀的楼主

HighBox 发表于 2020-10-13 21:59

排序sort()
去重unique()

输出索引就好
页: [1] 2
查看完整版本: 找出数组中第二大的数