冒泡排序怎么用多线程实现

paschen 2012-04-24 11:09:32
冒泡排序,
当排序的数组很大时,
如1000000个元素,
怎么用多线程实现,
以加快排序速度。
线程函数不知怎么分割,
难道直接上OpenMp?
可以给个代码示例吗?


for(int i=1;i<len;i++)
for(int j=len-1;j>=i;j--)
if(*(arr+j)<*(arr+j-1))
swap(arr+j-1,arr+j);


...全文
458 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljhhh0123 2012-04-25
  • 打赏
  • 举报
回复
冒泡排序效率本来就低。
自信男孩 2012-04-25
  • 打赏
  • 举报
回复
与其在多线程上来解决排序问题,不如从算法上着手解决。
liutengfeigo 2012-04-25
  • 打赏
  • 举报
回复
恩,我知道该怎么搞。
但是,你如果直接想出来了,那你真的是太牛了。哈哈
morebread 2012-04-25
  • 打赏
  • 举报
回复
用OpenMp开的多线程感觉对代码的要求是没有前值依赖性,如果某段时间的变量值依赖前面运算结果的话用OpenMp肯定会出错误的结果的
nice_cxf 2012-04-25
  • 打赏
  • 举报
回复
没有多CPU(多核不知道会不会并行操作),多线程处理排序没有任何意义,如果有多CPU,冒泡大概不行,用归并把
pathuang68 2012-04-25
  • 打赏
  • 举报
回复
用快排才是王道。

通常多线程排序估计意义不大,除非用一些特殊的方法。
paschen 2012-04-25
  • 打赏
  • 举报
回复
嗯嗯,好的,从算法上解决!谢谢大家帮助!
paschen 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

嗯......我觉得:

1.单核的cpu上,所谓的“并发处理”,其本质还是划分时间片“一个个的处理”,所以,看似并行,其实还是串行。并发处理,要么用在两件“非强关联”的相对独立的事情上,要么为了加速用户响应。

2.就冒泡排序而言,不仅仅分割开还是“串行”,此外的话,你打算怎么分割呢?例如:随机分成两组1 5 6和2 4 8,两组分别冒泡完毕之后,不能简单合并啊。

看法也不一定完……
[/Quote]

的确是,不好分,就算分了,最后也不能合起来
试过用OpenMp,得到的结果并不正确,
只是觉得不能写成多线程有点可惜,只用一个线程,效率好低。
paschen 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

http://download.csdn.net/detail/aabbcc3/676611
[/Quote]

那个资源是用多个线程执行不同的排序,每个线程负责一种排序,不是我想要的。
bearzyj2011 2012-04-24
  • 打赏
  • 举报
回复
嗯......我觉得:

1.单核的cpu上,所谓的“并发处理”,其本质还是划分时间片“一个个的处理”,所以,看似并行,其实还是串行。并发处理,要么用在两件“非强关联”的相对独立的事情上,要么为了加速用户响应。

2.就冒泡排序而言,不仅仅分割开还是“串行”,此外的话,你打算怎么分割呢?例如:随机分成两组1 5 6和2 4 8,两组分别冒泡完毕之后,不能简单合并啊。

看法也不一定完全正确,仅供参考。如果真的想多线程编程,那取决于你用的是windows还是linux,或者别的平台,直接百度应该有一堆示例的
西山小月 2012-04-24
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/aabbcc3/676611

602

社区成员

发帖
与我相关
我的任务
社区描述
异构开发技术
社区管理员
  • OpenCL和异构编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧