第二高的元素

时间:2016-06-26 04:35:06

标签: arrays sorting

要找到数组中第二高的元素,最好是对整个数组进行排序(冒泡排序),然后打印排序数组的第二高元素,或者我们应该找到数组的最高元素,删除它并再次查找最高元素(将是第二高元素)?

3 个答案:

答案 0 :(得分:3)

您应该在数组中进行一次传递,随时跟踪两个最高元素。

答案 1 :(得分:1)

坦率地说,也不是。排序数组最多只能是O(nlog(n))操作(不要使用冒泡排序,BTW!)。遍历数组两次仍然是一个O(n)操作,但你可以节省大约一半的运行时间 - 你可以在一次通过中重复数组,然后存储第二高的数据。

请考虑以下内容(Java中为int数组提供的示例,但应该可以轻松地翻译为任何其他语言或数据类型):

int secondHighest(int[] arr) {
     // Assumption: There are at least two elements in the array
     int highest;
     int secondHighest;
     if (arr[0] > arr[1]) {
         highest = arr[0];
         secondHighest = arr[1];
     } else {
         highest = arr[1];
         secondHighest = arr[0];
     }

     for (int i = 2; i < arr.length; ++i) {
         if (arr[i] >= highest) {
              secondHighest = highest;
              highest = arr[i];
          } else if (arr[i] > secondHighest) {
               secondHighest = arr[i];
          }
     }

     return secondHighest;
}

答案 2 :(得分:0)

完全可以一次通过,顺便提高效率。您查找两个最高值并选择第二个值。

伪代码

INTEGER FINDSECONDHIGHEST (ARRAY A)
    INTEGER FIRST = MINIMUM_INTEGER_VALUE_POSSIBLE
    INTEGER SECOND = MINIMUM_INTEGER_VALUE_POSSIBLE

    FOREACH INTEGER I IN A

        IF I > FIRST THEN

            SECOND = FIRST
            FIRST = I

        ELSE IF I > SECOND THEN

            SECOND = I

        END IF

    END FOREACH

RETURN SECOND