本意是这样的,给定一个整数数组,查找最小k个元素或最大k个元素。

假定有这样一组数列 { 10, 33, 2, 4, 55, 6, 12, 34, 456, 66, 43, 23, 65, 1, 345, 61, 76, 31, 43, 76 };

如和求出最小的k个值,或最大的k个值?下面我结合快速排序来进行了查找,本人只是做了一个实例,抛砖引玉,希望大家有更好的方法,代码是用C#代码实现的。

private int Partition(int[] R, int low, int high)
        {
            int temp = R[low];
             while (low < high)
            {
                while (low < high && temp <= R[high])
                {
                    high--;
                }
                R[low] = R[high];
                while (low < high && temp >= R[low])
                {
                    low++;
                }
                R[high] = R[low];
            }
            R[low] = temp;
            return low;
        }

/// <summary>
        /// 快速排序
        /// </summary>
        /// <param name="R"></param>
        /// <param name="low"></param>
        /// <param name="high"></param>
        private void QuickSort(int[] R, int low, int high,int k)
        {
          
            int pivotLoc = 0;
            if (low < high)
            {
                pivotLoc = Partition(R, low, high);
                QuickSort(R, low, pivotLoc - 1, k);
                if ( pivotLoc <= k)
                {                
                    QuickSort(R, pivotLoc + 1, high, k);
                }                                      
            }
        }

这是求k个最小值的,如果求k个最大值的,只需要修改下partition方法就可以了,本质上是一致的。

/// <summary>
        /// 从大到小排序
        /// </summary>
        /// <param name="R"></param>
        /// <param name="low"></param>
        /// <param name="high"></param>
        /// <returns></returns>
        private static int Big_To_Small_Partition(int[] R, int low, int high)
        {
            int temp = R[high];
            while (low < high)
            {
                while (low < high && temp <= R[low])
                {
                    low++;
                }
                R[high] = R[low];
                while (low < high && temp > R[high])
                {
                    high--;
                }
                R[low] = R[high];
            }
            R[high] = temp;
            return high;
        }

转载于:https://www.cnblogs.com/shaosks/archive/2011/12/03/2274721.html

给定数组,查找最小的k个元素或最大的k个元素相关推荐

  1. 【算法编程】旋转数组查找最小数字

    题目来源:牛客网 题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2, ...

  2. js数组查找最接近_在JavaScript数组中找到最小元素的位置

    在JavaScript数组中找到最小元素的位置 注*  之前有篇文章介绍过数据遍历的性能比较: for in 比for loop慢至少20倍 ,这是另外一篇比较数组查找性能的例子,通过对手工/inde ...

  3. java数组中最小的k个元素_java – 在数组中找到k个最小整数

    这是我的代码,它适用于查找1-7个最小整数,但是8和9.当我在数组中找到8个最小整数时,它返回null.任何人都可以帮我解决问题吗?我在这里使用quicksort. 非常感谢! 更新:我已经找到问题, ...

  4. c语言最小元素下标怎么看,查找最小的k个元素 (C语言代码)

    解题思路: 1.对于初学者来说,可能会对n个整数用冒泡或者选择排序从小到大排序,然后输出最小的k个数即可. 2.但是如果数据量真的到1万或者10万的话,用普通排序肯定会超时哦,可以用桶排序来实现.如果 ...

  5. 查找最小的k 个元素

    排序 一.题目:(感谢 http://blog.csdn.net/v_JULY_v 提供的题目) 查找最小的k 个元素 输入n 个整数,输出其中最小的k 个. 例如输入1,2,3,4,5,6,7 和8 ...

  6. 给定数组,每个元素代表一个木头的长度,木头可以任意截断, 从这堆木头中截出至少k个相同长度为m的木块,已知k,求max(m)

    给定数组,每个元素代表一个木头的长度,木头可以任意截断, 从这堆木头中截出至少k个相同长度为m的木块,已知k,求max(m) [9, 4, 3, 10, 7] k = 5 max(m) = ? pub ...

  7. 程序员面试题精选100题(05)-查找最小的k个元素[算法]

    题目:输入n个整数,输出其中最小的k个. 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个 ...

  8. 给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素

    http://blog.csdn.net/yysdsyl/article/details/5419149#cpp 题目: 给定数组Arr[n],对于其中的每个元素Arr[i](0=<i<n ...

  9. 找出无序数组中最小的k个数(top k问题)

    2019独角兽企业重金招聘Python工程师标准>>> 给定一个无序的整型数组arr,找到其中最小的k个数 该题是互联网面试中十分高频的一道题,如果用普通的排序算法,排序之后自然可以 ...

  10. 小米笔试题:无序数组中最小的k个数

    题目描述 链接:https://www.nowcoder.com/questionTerminal/ec2575fb877d41c9a33d9bab2694ba47?source=relative 来 ...

最新文章

  1. 厉害了,用Python绘制动态可视化图表,并保存成gif格式
  2. 生成GUID唯一值的方法汇总(dotnet/javascript/sqlserver)
  3. [机器学习] Apriori算法
  4. Spring框架整合MyBatis框架
  5. mysql less6教程_Sqli labs系列-less-56 报错注入法(上)
  6. Android应用开发(10)---资源类型
  7. 图像扩充边界_使用机器学习来索引数十亿图像中的文本
  8. Zurmo - - 国际化(翻译)
  9. html内容超出不自动滚动,16.css: overflow使用 例: 固定div大小,不让内容超出div
  10. Iphone 5s 8.0.2越狱
  11. Win10使用Windows照片查看器(Windows Photo Viewer)来打开图片
  12. 如何压缩word文档
  13. 服务器与Tomcat区别
  14. C/C++编程学习 - 第16周 ⑦ 三人行必有我师
  15. 当你对成功的渴望足以与你对呼吸的渴望相媲美的时候,你就会成功!
  16. java tps 优化_高tps下,java性能调优
  17. Python爬虫笔记(3)- 爬取丁香园留言
  18. 电容、频率之间的关系
  19. Qt错误 error: C2228: “.exec”的左边必须有类/结构/联合 的解决方法
  20. iPhone 电池的正确激活与使用方式

热门文章

  1. 【SimpleITK】坐标次序问题
  2. java string 日期格式_Java 日期格式和String 转换
  3. 解决curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
  4. C语言 — 转义字符
  5. redis(redis概念,运用场景,如何操作基本数据类型)
  6. 【转载】CentOS7.0下安装Telnet
  7. Effective C++笔记_条款35 考虑virtual 函数以外的其他选择
  8. android设置字符串到剪贴板
  9. BGP安全特性(华为设备)
  10. Kubernetes详解(二)——Kubernetes结构与资源对象