zoukankan      html  css  js  c++  java
  • 荷兰国旗问题

    荷兰国旗有三横条块构成,自上到下的三条颜色依次为红,白,蓝。现有若干由红,白,蓝三种颜色的条块序列,要将它们重新排列使所有相同颜色的条块在一起。本问题要求将所有红色的条块放在最左边,所有白色的条块放在中间,所有蓝色的条块放在最右边。

    //条块颜色依次存放在L[0,1,2........n-1]中算法利用快速排序思想,将整个序列按红,白,蓝排序。

    思想:

    设置三个整数r,w,b,其中r指向红色条块区域的下一个单元,w指向白色区域的下一个单元,b指向蓝色条块区的下一个单元。

    开始时,令r和w为0,b为n-1,w相当于快速排序的low指针,b相当于快速排序的的hight指针。

    最终L[0....r-1]存放红色条块,L[r....w-1]存放白色区域,L[w....n-1]存放蓝色条块区域。

    检查L[w]有一些三种情况:

    (1)如果L[w]=2它已经在白色区域,w直接加1.

    (2)如果L[w]=3则将它加到蓝色区域头部,即L[w]与L[b]交换,且b减1.

    (3)如果L[w]=1,此时先将白色区域的第一个元素(即红色区域的下一个单元)移动到白色区域末尾,再将它加到红色区域的下一个

    单元.即L[w]与L[r]交换,且r和w同时加1.

    重复上述操作直到w>b为止。

    #define LOCAL
    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    using namespace std;
    typedef int ElemType;
    const int maxSize=45;
    void Sort(int L[],int n)
    {
        int x,r,w,b;
        r=w=0;  //相当于low=0
        b=n-1;  //相当于hight
        while(w<=b)
        {
            x=L[w];
            if(x==1)
            {
                L[w]=L[r];
                w++;
                L[r]=x;
                r++;
            }else if(x==2){
                w++;
            }else{
                L[w]=L[b];
                L[b]=x;
                b--;
            }
        }
    }
    void Output(int L[],int n)
    {
        for(int i=0;i<n;i++)
         {
             cout<<L[i]<<",";
         }
         cout<<endl;
    }
    int main()
    {
    #ifdef LOCAL
        freopen("data.in","r",stdin);
        freopen("data.out","w",stdout);
    #endif    
         int i=0,L[maxSize];
         for(i=0;i<maxSize;i++)
         {
             cin>>L[i];
         }
         Sort(L,maxSize);
         Output(L,maxSize);
        return 0;
    }
  • 相关阅读:
    Fast polling using C, memcached, nginx and libevent
    为什么MongoDB可以替代MySQL?
    comet server 的介绍及方案选型
    多任务服务器架构设计
    基于libev面向分布式数据系统的C10K服务器设计
    libev & libevent简介
    memcached、redis、mysql、mongodb结合架构数据库系统
    删除数组中的重复元素
    不用运算符比较两个int数的大小
    JDBC之简介
  • 原文地址:https://www.cnblogs.com/jianfengyun/p/4019846.html
Copyright © 2011-2022 走看看