c++-求助:数组中找两个最大的数

问题描述

求助:数组中找两个最大的数
//算法一:依次扫描,分别找出A[x1]和A[x2]
void max2_1(int A[], int lo, int hi, int &x1, int &x2)  //1 < n = hi - lo
{
    for(int i = lo + 1, x1 = lo; i < hi; i++) //扫描A[lo,hi),找出A[x1]
    {
        if(A[x1] < A[i])
            x1  = i;      //hi-lo-1=n-1
    }
    int x2L = lo;
    int x2R = 0;
    int t = x1;
    for(int i = lo + 1; i < t; i++) //扫描A[lo,x1)
    {
        if(A[x2L] < A[i])
            x2L = i;      //x1-lo-1
    }
    for(int i = t + 1; i < hi; i++) //扫描A[x1,hi)
    {
        if(A[x2R] < A[i])
            x2R = i;     //hi-x1-1
    }
    x2 = (x2L > x2R) ? x2L : x2R;
} 

int main()
{
        int a[9] = {2,3,7,8,9,5,4,6,1};
        max2_1(a, 1, 6, x1, x2);
        cout << x1 << " " << x2 << endl;
        return 0;
}

这是一个在数组中找最大两个数的简单程序。在函数max2_1中int t = x1 在debug时,x1 =4, t却一直为0,请问这是为什么

时间: 2025-01-29 23:42:02

c++-求助:数组中找两个最大的数的相关文章

无序整数数组中找第k大的数

方法一:基于快排 1 /* 2 基于区间快排的第K小算法 ,输出a[k-1]即可,O(n*logn):每次只对后半部分递归便可把复杂度降到O(n) 3 主要思路是每次随机在数组中选取一个元素p,利用这个元素将数组分成两部分,比p小的元素在分好的数组左边,p和比p大的元素在数组右边, 4 根据k值选择在数组左半或者右半部分继续递归执行查找. 5 */ 6 #include <iostream> 7 #include <cstring> 8 #include <vector>

对“求数组中所有和为某固定数的所有数对”的算法的简单思考

一.题目描述 有一个数组a[1000],里面存放了1000个整数,请找出该数组中所有和为M的数对.例如数组为- 1,2,4,6,5,3,4,2,9,0,8,3,那么和为8的数对有(-1,9),(2,6),(4,4),(5,3),(5,3),(0,8). 二.最普通的算法 在不可率复杂度的情况下,对于这个问题的最简单的算法如下: private static List<int[]> UseNormalWay(int[] arr, int sumTotal) { List<int[]>

Single Number:从数组中找出只出现一次的数字

[ 问题: ] Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 翻译:给定一个整数数组,数组中所有元素都出现了两次,只有一个元素只出现

有序数组中找中位数

原文:Median of two sorted arrays 题目:两个有序数组A和B,大小都是n,寻找这两个数组合并后的中位数.时间复杂度为O(logn). 中位数:如果数组的个数是奇数,那么中位数的值就是有序时处于中间的数:如果数组个数是偶数的,那么就是有序时中间两个数的平均值. 方法一:合并时计数 使用Merge Sort时的Merge操作,比较两个数组时候计数,当计数达到n时,就可以得到中位数,在归并的数组中,中位数为下标n-1和n的两个数的平均值. 时间复杂度O(n). #includ

c++如何在9行9列的二维数组中找任意2点之间的走法,急~~~~~请帮忙~~~~~

问题描述 0123456781........2..a.....3........4........5....b...6........7........8........在这样一个二维数组中,遍历任意2点之间路径走法,如a->b的所有走法急~~请各位大侠帮忙解决一下,想用递归,但不知道怎么写注:遍历不能走斜线,a,b两点随即产生重谢 解决方案 解决方案二:楼主描述不明确,是否要两点间最短的路径,还是两点间所有路径解决方案三:如果要两点间所有路径就用迷宫搜索吧,效率比较低.一般都是搜索最短路径的

java在已经排好的数组中找出连续的数字

问题描述 纸牌游戏,一共5张牌,怎么找出连续的牌.我知道分好几种情况,5张牌不同,组成234564张牌13456或者12347或者33456(两个3算两个连续的情况)感觉有好多种情况分析,不知道该怎么写..求高手指点 解决方案 解决方案二:看得不是很明白,只要有连续的就算连续的情况吗?那个3算两个连续是什么0.0

经典算法(12) 数组中只出现1次的两个数字(百度面试题)

首先来看题目要求: 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找 出这两个数字. 考虑下这个题目的简化版--数组中除一个数字只出现1次外,其它数字都成对出现 ,要求尽快找出这个数字.这个题目在之前的<位操作基础篇之位操作全面总结>中的"位操作趣味应用" 中就已经给出解答了.根据异或运算的特点,直接异或一次就可以找出这个数字. 现在数组中有两个 数字只出现1次,直接异或一次只能得到这两个数字的异或结果,但光从这个结果肯定无法得到这个两个数字 .因此我

《剑指offer》-递增数组中找到和为S的(最小)两个元素

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 首先一个坑是,返回值的问题.题目描述说返回两个数字,并且小的在前面,大的在后面. C++的返回值明明只有一个啊?那就要放到数组或者其他容器里面,或者作为一个对象返回..本题中使用vector容器进行存储. 其次容易想到两边夹的方法,直接写就好了 class Solution { public: vect

JavaScript实现在数组中查找不同顺序排列的字符串

  需求描述:从一组数组中找出一组按不同顺序排列的字符串的数组元素.假如有这样一个数组: 代码如下: [ 'abcd', 'hello', 'bdca', 'olleh', 'cadb', 'nba', 'abn', 'abc' ] 需要找出的结果是: 代码如下: [ 'abcd', 'bdca', 'cadb' ] 那么这里的关键点是判断一组字符串是否是否只是字符的顺序不同,只要解决整个关键点其他都好办了. 方法1: 代码如下: var stringClassify = function( a