最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)查找中位數(shù)的O(N)算法和Kmin算法

 更新時(shí)間:2014年09月18日 10:44:21   投稿:shichen2014  
這篇文章主要介紹了C++實(shí)現(xiàn)查找中位數(shù)的O(N)算法和Kmin算法,對(duì)于C++程序算法設(shè)計(jì)有一定的借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了C++實(shí)現(xiàn)查找中位數(shù)的O(N)算法和Kmin算法,分享給大家供大家參考。具體方法如下:

利用快速排序的partition操作來(lái)完成O(N)時(shí)間內(nèi)的中位數(shù)的查找算法如下:

#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];
}

希望本文所述對(duì)大家C++程序算法設(shè)計(jì)的學(xué)習(xí)有所幫助。

相關(guān)文章

最新評(píng)論

遵义市| 金乡县| 壶关县| 仁寿县| 视频| 和平县| 白城市| 贵南县| 武义县| 香格里拉县| 襄城县| 大方县| 上虞市| 苍山县| 桃园市| 天镇县| 黔江区| 桓仁| 海丰县| 丰宁| 卢湾区| 衢州市| 临海市| 上饶市| 闻喜县| 东阳市| 杭锦旗| 横山县| 平利县| 靖江市| 色达县| 杭锦旗| 民和| 东乌珠穆沁旗| 怀来县| 长阳| 嘉鱼县| 德庆县| 闻喜县| 禹州市| 牙克石市|