最新国产好看的视频,伊人天堂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操作來完成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)論

舞钢市| 开封县| 四子王旗| 准格尔旗| 左云县| 神木县| 巫溪县| 富锦市| 固安县| 彝良县| 荣昌县| 龙海市| 文化| 岑巩县| 福清市| 富源县| 龙山县| 文水县| 凌源市| 普定县| 黔西| 连平县| 葵青区| 中宁县| 嘉鱼县| 丰顺县| 左权县| 北川| 兴宁市| 墨脱县| 枞阳县| 兰溪市| 塘沽区| 马山县| 平南县| 兴城市| 眉山市| 随州市| 卓尼县| 水富县| 神池县|