网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
VC中利用多线程技术实现线程之间的通信
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
节点数组下标
   //注意到树节点序数跟数组下标不是等同的,因为建堆的元素个数逐个递减
   if(Array[j] < Array[p]) //如果父节点数值大则交换父节点和字节点
   {
    swap = Array[j];
    Array[j] = Array[p];
    Array[p] = swap;
   }
  }
 }
 PrintResult(Array, iLength, "Heap Sort"); //向控制台打印排序结果
 InterlockedIncrement(&ThreadCompleted); //返回前使线程完成数标记加1
 if(ThreadCompleted == 4) SetEvent(evtTerminate); //检查是否其他线程都已执行完
 //若都执行完则设置程序结束信号量
 return 0;
}

/*插入排序思想:把源数据序列看成两半,前面一半是有序的,后面一半是无序的,把无序的数据从头到尾逐个逐个的插入到前面的有序数据中,使得有序的数据的个数不断增大,同时无序的数据个数就越来越少,最后所有元素都会变得有序。*/
unsigned long __stdcall InsertSort(void* theArray)
{
 long* Array = ((MySafeArray*)theArray)->data;
 int iLength = ((MySafeArray*)theArray)->iLength;
 int i=1, j=0;
 long temp;
 for(i=1; i {
  temp = Array[i]; //取出序列后面无序数据的第一个元素值
  for(j=i; j>0; j--) //和前面的有序数据逐个进行比较找出合适的插入位置
  {
   if(Array[j - 1] >temp) //如果该元素比插入值大则后移
    Array[j] = Array[j - 1];
   else //如果该元素比插入值小,那么该位置的后一位就是插入元素的位置
    break;
  }
  Array[j] = temp;
 }
 PrintResult(Array, iLength, "Insert Sort"); //向控制台打印排序结果
 InterlockedIncrement(&ThreadCompleted); //返回前使线程完成数标记加1
 if(ThreadCompleted == 4) SetEvent(evtTerminate); //检查是否其他线程都已执行完
  //若都执行完则设置程序结束信号量
 return 0;
}

/*快速排序思想:快速排序是分治思想的一种应用,它先选取一个支点,然后把小于支点的元素交换到支点的前边,把大于支点的元素交换到支点的右边。然后再对支点左边部分和右
边部分进行同样的处理,这样若干次之后,数据就会变得有序。下面的实现使用了递归
建立两个游标:iLow,iHigh;iLow指向序列的第一个元素,iHigh指向最后一个先选第一个元素作为支点,并把它的值存贮在一个辅助变量里。那么第一个位置就变为空并可以放置其他的元素。 这样从iHigh指向的元素开始向前移动游标,iHigh查找比支点小的元素,如果找到,则把它放置到空置了的位置(现在是第一个位置),然后iHigh游标停止移动,这时iHigh指向的位置被空置,然后移动iLow游标寻找比支点大的元素放置到iHigh指向的空置的位置,如此往复直到iLow与iHigh相等。最后使用递归对左右两部分进行同样处理*/

int QuickSort(long* Array, int iLow, int iHigh)
{
 if(iLow >= iHigh) return 1; //递归结束条件
 long pivot = Array[iLow];
 int iLowSaved = iLow, iHighSaved = iHigh; //保未改变的iLow,iHigh值保存起来
 while (iLow < iHigh)
 {
  while (Array[iHigh] >= pivot && iHigh >iLow) //寻找比支点大的元素
   iHigh -- ;
  Array[iLow] = Array[iHigh]; //把找到的元素放置到空置的位置
  while (Array[iLow] < pivot && iLow < iHigh) //寻找比支点小的元素
   iLow ++ ;
  Array[iHigh] = Array[iLow]; //把找到的元素放置到空置的位置
 }
 Array[iLow] = pivot; //把支点值放置到支点位置,这时支点位置是空置的
 //对左右部分分别进行递归处理
 QuickSort(Array, iLowSaved, iHigh-1);
 QuickSort(Array, iLow+1, iHighSaved);
 return
  • 上一篇资讯: 利用OpenGL实现三维绘图
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号