zoukankan      html  css  js  c++  java
  • 《算法导论》——顺序统计RandomizedSelect

    RandomizedSelect.h:

    #include <stdlib.h>
    
    namespace dksl
    {
        /*
        *交换
        */
        void Swap(int* numArray,int swapFrom,int swapTo)
        {
            int temp=numArray[swapFrom];
            numArray[swapFrom]=numArray[swapTo];
            numArray[swapTo]=temp;
        }
        
        /*
        *随机化快排
        */
        int RandomizedPartition(int* numArray,int head,int tail)
        {
            int r=rand()%(tail-head+1)+head;
            Swap(numArray,r,tail);
    
            int pivot=numArray[tail];
            int i=head-1;
            int j=tail;
            while(true)
            {
                do
                {
                    i++;
                }while (i<=tail&&numArray[i]<pivot);
                do
                {
                    j--;
                }while (j>=head&&numArray[j]>pivot);
                if(j<i)
                    break;
                Swap(numArray,i,j);
            }
            Swap(numArray,j+1,pivot);
            return j+1;
        }
    
        /*
        *选择任意顺序统计量,numArray为待选择数组,head为数组开始位置索引,tail为数组结束位置索引,i为待选择的第i+1小的值
        */
        int RandomizedSelect(int* numArray,int head,int tail,int i)
        {
            if(head==tail)
                return numArray[head];
            int q=RandomizedPartition(numArray,head,tail);
            int k=q-head+1;
            if(i==k)
                return numArray[q];
            else if(i<k)
                return RandomizedSelect(numArray,head,q-1,i);
            else
                return RandomizedSelect(numArray,q+1,tail,i-k);
        }
    }

    RandomizedSelect.cpp

    // RandomizedSelect.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include "RandomizedSelect.h"
    
    using namespace std;
    using namespace dksl;
    int _tmain(int argc, _TCHAR* argv[])
    {
        int a[10] = {1, 4, 8, 15, 10, 25, 54, 15, 12, 2}; 
        cout<<RandomizedSelect(a,0,9,5)<<endl;    
        system("PAUSE");
        return 0;
    }

  • 相关阅读:
    Voice over IP
    [转】:TCP/IP详解学习笔记(5)
    windows phone 7 version: ObservableCollectionEx (1)
    MA0003 移动智能网原理
    TCP 网络书籍
    windows Phone 7如何实现background的情况下不丢失数据
    最近想要学习和了解的东东
    Windows phone 7 开发注意事项
    android Tab标签下得按钮
    新浪微博教程(一)
  • 原文地址:https://www.cnblogs.com/DKSL/p/3161837.html
Copyright © 2011-2022 走看看