回 帖 发 新 帖 刷新版面

主题:急需各位帮助呀.急急急,希望各位帮忙,谢谢

急需要一个用C++编写的程序. 快速排序,合并排序.而且这个程序要基于分治策略.
  在哪个网站也能找到这样的程序??

回复列表 (共3个回复)

沙发

#include "stdafx.h"
using namespace std;

const int Max = 10;

int _tmain(int argc, _TCHAR* argv[])
{
    int e[Max];
    int stack[Max][2];
    for(int i=0;i<10;i++)
    e[i]=rand()%139;
    int a,b,low,high,c;
    stack[0][0]=0,stack[0][1]=Max-1;
    int top = 0;
    while(top>=0)
    {
        low=a=stack[top][0];
        high=b=stack[top][1];
        top--;
        c=e[a];
        while(a<b)
        {
            while(e[b]>c&&a<b)
                b--;
            if(a<b)
                e[a++]=e[b];
            while(e[a]<c&&a<b)
                a++;
            if(a<b)
                e[b--]=e[a];
        }
        e[a]=c;
        if(a-1>low)
        {
            top++;
            stack[top][0]=low;
            stack[top][1]=a-1;
        }
        if(high>a+1)
        {
            top++;
            stack[top][0]=a+1;
            stack[top][1]=high;
        }
    }
    for(int i=0;i<Max;i++)
        cout<<e[i]<<"   ";
    cout<<endl;
    return 0;
}
这是快速排序的非递归算法

板凳

想问您一下:分治策略是什么意思?请指教,我不是很清楚

3 楼

分制法 就是分而制治
不断的进行划分
当划分为最的小的单元的时候
在单元内进行排序
然后在不断的合并

我来回复

您尚未登录,请登录后再回复。点此登录或注册