给定数组,查找最小的k个元素或最大的k个元素 快速排序算法灵活应用
2012-04-04 23:33
369 查看
假定有这样一组数列 { 10, 33, 2, 4, 55, 6, 12, 34, 456, 66, 43, 23, 65, 1, 345, 61, 76, 31, 43, 76 };
如和求出最小的k个值,或最大的k个值?
借鉴快速排序算法,下面是本科教材《数据结构》中的快速排序:
下面稍作修改,改为仅把最小的K个元素放在前k个位置上:
如和求出最小的k个值,或最大的k个值?
借鉴快速排序算法,下面是本科教材《数据结构》中的快速排序:
void QuickSort ( int A[ ], int head, int rear ) { int pivot; if( head < rear ) // 肯定为真的条件 { pivot = Partition ( A, head, rear ); QuickSort( A, head, pivot-1 ); QuickSort( A, pivot+1, rear ); } } int Partition ( int A[ ], int left, int right ) //这是左大右小的排序 { int pivot = A[ left ]; while( left < right ) { while( right > left && A[ right ] >= tem ) right--; A[ left ] = A[ right ]; while( left < right && A[ left ] <= tem ) left++; A[ right ] = A[ left ]; } A[ left ] = tem; return left; //最后left=right,所以返回哪个都一样 }
下面稍作修改,改为仅把最小的K个元素放在前k个位置上:
void QuickSearch( int A[], int head, int rear, int k ) { int pivot; if ( head < rear ) //肯定为真的条件 { pivot = partition( A, head, rear ); if( piovt < K ) QuickSearch( A, pivot-1, rear, int K-pivot ); if( pivot > k ) QuickSearch( A, head, pivot-1, int K ); } }
相关文章推荐
- 给定数组,查找最小的k个元素或最大的k个元素
- 在一个数组中查找最大的K个元素或者最小的K个元素
- 实验九指针1、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- 查找数组(不限维数)中的最大元素和最小元素
- 实验9 指针1 、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依
- 给定一个含有n个元素的整型数组a,求a中的最大值和最小值。
- 算法导论第十二章关于搜索二叉树的建立,查询,查找最大最小元素值,查找给定结点的直接后继
- 设计一个最优算法来查找n个元素数组中的最大值和最小值
- 设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。
- 实验9 指针1 1、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- 无序数组同时查找最大和最小的元素
- 算法实验一:二分查找算法改进: 当搜索元素x不存在时,返回小于x的最大元素位置i和大于x的最小元素位置j. 当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
- 实验9(1)程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- 给定一个非负整数数组,最初定位在数组的第一个索引处。组中的每个元素表示您在该位置的最大跳跃长度。求最小跳数
- C语言 查找数组中最大最小元素
- 转:求一维数组中元素的最大值和最小值和位置
- 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 请写一个简单的求数组元素最大值和最小值的方法
- 8+查找一个旋转数组的最小元素
- 找出给定数数组里连续的元素和的最大值