网站导航网学 原创论文 网站设计 最新系统 最新研究 原创论文 获取论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计下载 > VC与C++类别 > 正文

VC++多种排序算法研究

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/05/14

网学网为需要VC与C++类别的朋友们搜集整理了VC++多种排序算法研究相关资料,希望对各位网友有所帮助!

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn

 

1.1 动态演示冒泡算法模块设计
首先,本系统是在Visual C++ 6.0中文版下MFC 环境下,设置的“MFC AppWizard(exe)”工程,工程名为:“tt”。相关的ID如表4_1,4_2所示
 
4-1 为工程添加IDR_MAINFRAME的菜单选项

ID
说明文字
功能描述
IDC_SORT_BUBBLE
冒泡法排序
冒泡法排序

   
 
4-2 打开类向导(Class Wizard)对话框向视图类添加响应函数

Object ID
Messages
Messages的描述
函数名
IDC_SORT_BUBBLE
COMMAND
选择该菜单
OnSortBubble

 
4-3 通过类查看(ClassView)选项卡,向视图类添加成员变量

变量类型
变量名
功能描述
int
m_SortBubble[N]
记录关键字
CRect
m_SortBubbleRect
动态演示矩形范围
BOOL
IsSortBubble
TRUE表示进行冒泡排序

 
打开ttView.h头文件,在文件开始部分定义两个常量:
#define N 70                       //设定排序的记录次数
#define DELAY 3                    //每次交换操作所耗
#define DELAY1 1                   //每次比较操作所耗的时间
 
并在其下声明冒泡排序的全局函数:
UINT ThreadSortBubble(LPVOID lp);
 
由于开启多线程时,使用的都是全局函数,想要获得当前视图类中的数据,并实时更新试图的显示,就必须获取当前试图对象。所以本系统要定义一个全局指针,打开ttView.cpp构建函数中加入语句“CTtView *pView”用来获取当前视图。
 
然后,系统在ttView.cpp构建文件中添加实现冒泡排序算法的函数:ThreadSortBubble,代码为:
UINT ThreadSortBubble(LPVOID lp)
{
   int * data;
   int i,j,key;
   int tag;
   data=pView->m_SortBubble;
   for(i=0;i<N;i++)
   {
       tag=0;
       for(j=N-1;j>i;j--)
       {
          if(data[j]>data[j-1])
          {
              key=data[j];
              data[j]=data[j-1];
              data[j-1]=key;
              Sleep(DELAY);
              pView->Invalidate(TRUE);
               tag++;
          }
          Sleep(DELAY1);
       }
       if(tag==0)
          break;
   }
   pView->Invalidate(TRUE);
   return 0;
 
在类中查看(Class View)选项,打开视图类CTtView,在其中修改构建函数,实现变量初始化:
CTtView::CTtView()
{
   int i;
   srand((unsigned)time(NULL));
   for(i=0;i<N;i++)
      m_SortBubble[i] =0;
   pView=this;
   IsSortBubble=FALSE;
}
 
为了让大家看清楚排序之间对比和交换的过程,修改响应函数“OnSortBubble”,产生0-70随即整数来进行排序:
void CTtView::OnSortBubble()
{
   for(int i=0;i<N;i++)
   {
      m_SortBubble[i]=(int)((double)rand()*70.0/(double)RAND_MAX);
   }
IsSortBubble=TRUE;
   AfxBeginThread(ThreadSortBubble,GetSafeHwnd());
}
 
最后修改OnDraw函数,利用画刷实现动态绘制:
void CTtView::OnDraw(CDC* pDC)
{
   int i;
   CTtDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
if(IsSortBubble)
   {
      CBrush BlueBrush(RGB(0,255,0));
      pDC->TextOut(250,200,"冒泡排序演示");//
      for(i=0;i<N;i++)
      {
          m_SortBubbleRect.bottom=170;
          m_SortBubbleRect.left=250+i*2;
          m_SortBubbleRect.right=m_SortBubbleRect.left+1;
          m_SortBubbleRect.top=m_SortBubbleRect.bottom-m_SortBubble[i];
          pDC->FillRect(&m_SortBubbleRect,&BlueBrush);
      }
      BlueBrush.DeleteObject();
   }
1.2 动态演示选择算法模块设计
4-4 为工程添加IDR_MAINFRAME的菜单选项

ID
说明文字
功能描述
IDC_SORT_SELECT
选择法排序
选择法排序

   
4-5 打开类向导(Class Wizard)对话框向视图类添加响应函数

Object ID
Messages
Messages的描述
函数名
IDC_SORT_SELECT
COMMAND
选择该菜单
OnSortSelect

 
4-6 通过类查看(ClassView)选项卡,向视图类添加成员变量

变量类型
变量名
功能描述
int
m_SortSelect[N]
记录关键字
CRect
m_SortSelectRect
动态演示矩形范围
BOOL
IsSortSelect
TRUE表示进行选择排序

 
TtView.h头文件,声明选择排序的全局函数:
UINT ThreadSortSelect(LPVOID lp);
 
然后,在TtView.cpp构建文件中添加实现选择排序算法的函数:ThreadSortSelect,代码为:
UINT ThreadSortSelect(LPVOID lp)
{
int i,j,key,tmp;
int *data;
data=pView->m_SortSelect;
 
for(i=0;i<N-1;i++)
{
    key=i;
    for(j=i+1;j<N;j++)
    {
        if(data[j]>data[key])
        {
           key=j;
           pView->Invalidate(TRUE);
        }
        Sleep(DELAY1);
    }
    Sleep(DELAY);
    tmp=data[i];
    data[i]=data[key];
    data[key]=tmp;
}
 
Sleep(DELAY);
pView->Invalidate(TRUE);
return 0;
}
 
在类中查看(Class View)选项,打开视图类CTtView,在其中修改构建函数,实现变量初始化:
CTtView::CTtView()
{
   int i;
   srand((unsigned)time(NULL));
   for(i=0;i<N;i++)
      m_SortSelect[i] =0;
   pView=this;
   IsSortSelect=FALSE;
}
 
修改响应函数“OnSortSelect”,产生0-70随即整数来进行排序:
void CTtView::OnSortSelect()
{
   for(int i=0;i<N;i++)
   {
      m_SortSelect[i]=(int)((double)rand()*70.0/(double)RAND_MAX);
   }
IsSortSelect=TRUE;
   AfxBeginThread(ThreadSortSelect,GetSafeHwnd());
}
 
最后修改OnDraw函数,利用画刷实现动态绘制:
void CTtView::OnDraw(CDC* pDC)
{
   int i;
   CTtDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
if(IsSortSelect)
   {
      CBrush BlueBrush(RGB(0,255,0));
      pDC->TextOut(50,200,"选择排序演示");
      for(i=0;i<N;i++)    
{
m_SortSelectRect.bottom=170;
m_SortSelectRect.left=50+i*2;
m_SortSelectRect.right=m_SortSelectRect.left+1;
          m_SortSelectRect.top=m_SortSelectRect.bottom-m_SortSelect[i];
pDC->FillRect(&m_SortSelectRect,&BlueBrush);
      }
      BlueBrush.DeleteObject();
   }
1.3 动态演示快速算法模块设计
4-7 为工程添加IDR_MAINFRAME的菜单选项

ID
说明文字
功能描述
IDC_SORT_QUICK
快速法排序
快速法排序

   
4-8 打开类向导(Class Wizard)对话框向视图类添加响应函数

Object ID
Messages
Messages的描述
函数名
IDC_SORT_QUICK
COMMAND
快速该菜单
OnSortQuick

 
4-9 通过类查看(ClassView)选项卡,向视图类添加成员变量

变量类型
变量名
功能描述
int
m_SortQuick[N]
记录关键字
CRect
m_SortQuickRect
动态演示矩形范围
BOOL
IsSortQuick
TRUE表示进行选择排序

 
TtView.h头文件,声明选择排序的全局函数:
UINT ThreadSortQuick(LPVOID lp);
void QuickSort(int * data,int s,int t);
 
TtView.cpp构建文件中添加实现快速排序算法的函数:ThreadSortSelect和QuickSort,代码为:
void QuickSort(int * data,int low,int high)
{
   int i=low,j=high;
   int tmp,key;
if(low<high)
   {
       tmp=data[low];
       while(i<j)
       {
          while(i<j)
          {
              if(data[j]<=tmp)
              {
                 j--;
                 Sleep(DELAY1);
              }
              else
              {
                 break;
              }
          }
          key=data[i];
          data[i]=data[j];
          data[j]=key;
          Sleep(DELAY);
          pView->Invalidate(TRUE);
 
while(i<j)
          {
              if(data[i]>=tmp)
              {
                 i++;
                 Sleep(DELAY1);
              }
              else
              {
                 break;
              }
          }
 
key=data[i];
          data[i]=data[j];
          data[j]=key;
          Sleep(DELAY);
          pView->Invalidate(TRUE);
       }
       QuickSort(data,low,i-1);
       QuickSort(data,i+1,high);
   }
}
UINT ThreadSortQuick(LPVOID lp)
{
   int * data;
   data=pView->m_SortQuick;
   pView->Invalidate(TRUE);
   Sleep(DELAY);
   QuickSort(data,0,N-1);
 
   return 0;
}
 
打开类(Class View)中视图类CTtView,在其中修改构建函数,实现变量初始化:
CTtView::CTtView()
{
   int i;
   srand((unsigned)time(NULL));
   for(i=0;i<N;i++)
      m_SortQuick[i] =0;
   pView=this;
   IsSortQuick=FALSE;
}
 
修改响应函数“OnSortQuick”,产生0-70随即整数来进行排序:
void CTtView::OnSortQuick()
{
   for(int i=0;i<N;i++)
   {
      m_SortQuick[i]=(int)((double)rand()*700.0/(double)RAND_MAX);
   }
IsSortQuick=TRUE;
   AfxBeginThread(ThreadSortQuick,GetSafeHwnd());
}
 
最后修改OnDraw函数,利用画刷实现动态绘制:
void CTtView::OnDraw(CDC* pDC)
{
   int i;
   CTtDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
if(IsSortQuick)
       {
       CBrush BlueBrush(RGB(0,255,0));
       pDC->TextOut(450,200,"快速排序演示");//
       for(i=0;i<N;i++)
       {
           m_SortQuickRect.bottom=170;
           m_SortQuickRect.left=450+i*2;
           m_SortQuickRect.right=m_SortQuickRect.left+1;
           m_SortQuickRect.top=m_SortQuickRect.bottom-m_SortQuick[i];
           pDC->FillRect(&m_SortQuickRect,&BlueBrush);
       }
       BlueBrush.DeleteObject();
    }
1.4 同时比较三种算法模块设计
4-10 为工程添加IDR_MAINFRAME的菜单选项

ID
说明文字
功能描述
IDC_SORT_ALL
同时比较
三种方法同时进行比较

 
4-11 打开类向导(Class Wizard)对话框向视图类添加响应函数

Object ID
Messages
Messages的描述
函数名
IDC_SORT_ALL
COMMAND
快速该菜单
OnSortAll

 
同时比较这三种排序,就是同时调用这三种排序演示线程,修改响应函数OnSortAll:
void CTtView::OnSortAll()
{
     // TODO: Add your command handler code here
     OnSortBubble1();
     OnSortQuick1();
     OnSortSelect1();
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT

本文选自计算机毕业设计http://myeducs.cn
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

  • 上一篇资讯: VC++语音聊天系统的设计
  • 原创论文

    设为首页 | 加入收藏 | 论文首页 |原创论文 |
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师