C++实现查找中位数的O(N)算法和Kmin算法

 更新时间:2014年09月18日 10:44:21   投稿:shichen2014  
这篇文章主要介绍了C++实现查找中位数的O(N)算法和Kmin算法,对于C++程序算法设计有一定的借鉴价值,需要的朋友可以参考下

本文实例讲述了C++实现查找中位数的O(N)算法和Kmin算法,分享给大家供大家参考。具体方法如下:

利用快速排序的partition操作来完成O(N)时间内的中位数的查找算法如下:

#include <iostream>
#include <cassert>
#include <algorithm>
#include <iterator>

using namespace std;

int array[] = {1, 2, 10, 8, 9, 7, 5};
const int size = sizeof array / sizeof *array;

int partition(int *array, int left, int right)
{
 if (array == NULL)
 return -1;

 int pos = right;
 right--;
 while (left <= right)
 {
 while (left < pos && array[left] <= array[pos])
  left++;

 while (right >= 0 && array[right] > array[pos])
  right--;

 if (left >= right)
  break;

 swap(array[left], array[right]);
 }
 swap(array[left], array[pos]);

 return left;
}

int getMidIndex(int *array, int size)
{
 if (array == NULL || size <= 0)
 return -1;

 int left = 0;
 int right = size - 1;
 int midPos = right >> 1;
 int index = -1;

 while (index != midPos)
 {
 index = partition(array, left, right);

 if (index < midPos)
 {
  left = index + 1;
 }
 else if (index > midPos)
 {
  right = index - 1;
 } 
 else
 {
  break;
 }
 }

 assert(index == midPos);
 return array[index];
}

void main()
{
 int value = getMidIndex(array, size);

 cout << "value: " << value << endl;
}

寻找kmin算法如下:

int findKMin(int *array, int size, int k)
{
 if (array == NULL || size <= 0)
 return -1;

 int left = 0;
 int right = size - 1;
 int index = -1;

 while (index != k)
 {
 index = partition(array, left, right);

 if (index < k)
 {
  left = index + 1;
 }
 else if (index > k)
 {
  right = index - 1;
 } 
 else
 {
  break;
 }
 }

 assert(index == k);
 return array[index];
}

希望本文所述对大家C++程序算法设计的学习有所帮助。

相关文章

  • C++关键字const使用方法详解

    C++关键字const使用方法详解

    C语言中的const与C++有很大的不同,在C语言中用const修饰的变量仍是一个变量,表示这个变量是只读的,不可显示地更改,C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,const关键字是一种修饰符
    2022-12-12
  • C语言 数据结构堆排序顺序存储(升序)

    C语言 数据结构堆排序顺序存储(升序)

    这篇文章主要介绍了C语言 数据结构堆排序顺序存储(升序)的相关资料,需要的朋友可以参考下
    2017-05-05
  • 基于Matlab实现BP神经网络交通标志识别

    基于Matlab实现BP神经网络交通标志识别

    道路交通标志用以禁止、警告、指示和限制道路使用者有秩序地使用道路, 保障出行安全.若能自动识别道路交通标志, 则将极大减少道路交通事故的发生。本文将介绍基于Matlab实现BP神经网络交通标志识别,感兴趣的可以学习一下
    2022-01-01
  • C语言详细分析讲解多文件的程序设计

    C语言详细分析讲解多文件的程序设计

    所谓的C语言多文件编程就是,将代码实现模块化。比如说一个项目的一项功能放在一个一个文件里,然后将实现这个功能的函数放在一个c文件<BR>
    2022-04-04
  • C语言中的浮点数据类型

    C语言中的浮点数据类型

    这篇文章主要介绍了C语言中的浮点数据类型,文章会从处理带小数的数值的相关资料开始介绍,感兴趣的小伙伴的可以参考下面 文章的具体内容
    2021-10-10
  • 数据结构之堆的具体使用

    数据结构之堆的具体使用

    本文主要介绍了数据结构之堆的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C++实现bmp格式图像读写

    C++实现bmp格式图像读写

    这篇文章主要为大家详细介绍了C++实现bmp格式图像读写,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C++中的类成员函数当线程函数

    C++中的类成员函数当线程函数

    这篇文章主要介绍了C++中的类成员函数当线程函数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C语言实现通讯录功能的流程与代码

    C语言实现通讯录功能的流程与代码

    通讯录是一个可以记录亲人、好友信息的工具,这篇文章主要为大家详细介绍了C语言实现通讯录管理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++实现LeetCode(73.矩阵赋零)

    C++实现LeetCode(73.矩阵赋零)

    这篇文章主要介绍了C++实现LeetCode(73.矩阵赋零),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论