▶ 学习了双调排序,参考(https://blog.csdn.net/xbinworld/article/details/76408595)

● 使用 CPU 排序的代码

  1. #include <stdio.h>
  2.  
  3. #define LENGTH 1024
  4. #define ASCENDING 1
  5. #define DESCENDING 0
  6.  
  7. int a[LENGTH];
  8.  
  9. void compare(int i, int j, int dir)
  10. {
  11. if (dir == (a[i]>a[j]))
  12. {
  13. int h = a[i];
  14. a[i] = a[j];
  15. a[j] = h;
  16. }
  17. }
  18.  
  19. void bitonicMerge01(int lo, int cnt, int dir)// 先再大跨度(半区间长)上调整元素,再递归地在小跨度上进行相同的调整
  20. {
  21. if (cnt > )
  22. {
  23. int k = cnt / ;
  24. for (int i = lo; i < lo + k; i++)
  25. compare(i, i + k, dir);
  26. bitonicMerge01(lo, k, dir);
  27. bitonicMerge01(lo + k, k, dir);
  28. }
  29. }
  30.  
  31. void bitonicSort01(int lo, int cnt, int dir)// 先递归地要求小跨度区间依次排成 “升↗降↘升↗降↘” 再在较大跨度上进行合并
  32. {
  33. if (cnt > )
  34. {
  35. int k = cnt / ;
  36. bitonicSort01(lo, k, ASCENDING);
  37. bitonicSort01(lo + k, k, DESCENDING);
  38. bitonicMerge01(lo, cnt, dir);
  39. }
  40. }
  41.  
  42. void bitonicMerge02(int l, int r, const int dir)
  43. {
  44. if (r - l > )
  45. {
  46. int stride = (r - l) / + ;
  47. for (int i = l; i < l + stride; i++)
  48. compare(i, i + stride, dir);
  49. bitonicMerge02(l, l + stride - , dir);
  50. bitonicMerge02(l + stride, r, dir);
  51. }
  52. }
  53.  
  54. void bitonicSort02(int l, int r, const int dir)
  55. {
  56. if (r - l > )
  57. {
  58. int rNew = l + (r - l) / ;
  59. bitonicSort02(l, rNew, ASCENDING);
  60. bitonicSort02(rNew + , r, DESCENDING);
  61. bitonicMerge02(l, r, dir);
  62. }
  63. }
  64.  
  65. void bitonicMerge03(int l, int r, const int dir)
  66. {
  67. if (r - l > )
  68. {
  69. int stride = (r - l) / ;
  70. for (int i = l; i < l + stride; i++)
  71. compare(i, i + stride, dir);
  72. bitonicMerge03(l, l + stride, dir);
  73. bitonicMerge03(l + stride, r, dir);
  74. }
  75. }
  76.  
  77. void bitonicSort03(int l, int r, const int dir)
  78. {
  79. if (r - l > )
  80. {
  81. int rNew = l + (r - l) / ;
  82. bitonicSort03(l, rNew, ASCENDING);
  83. bitonicSort03(rNew, r, DESCENDING);
  84. bitonicMerge03(l, r, dir);
  85. }
  86. }
  87.  
  88. int main()
  89. {
  90. int i, error;
  91. srand();
  92. for (i = ; i < LENGTH; a[i++] = rand());
  93.  
  94. printf("\n");
  95. for (i = ; i < LENGTH; i++)
  96. {
  97. printf("%5d,", a[i]);
  98. if ((i + ) % == )
  99. printf("\n");
  100. }
  101.  
  102. //bitonicSort01(0, LENGTH, ASCENDING); // 使用起点和长度
  103. //bitonicSort02(0, LENGTH - 1, ASCENDING); // 使用左端点和右端点(都包含)
  104. bitonicSort03(, LENGTH, ASCENDING); // 使用左端点和右端点(左包含右不包含)
  105.  
  106. printf("\n");
  107. for (i = , error = -; i < LENGTH; i++)
  108. {
  109. printf("%5d,", a[i]);
  110. if (i < LENGTH - && a[i] > a[i + ])
  111. error = i;
  112. if ((i + ) % == )
  113. printf("\n");
  114. }
  115. if (error != -)
  116. printf("\n\nerror at i==%d, a[i]==%d, a[i+1]==%d", error, a[error], a[error + ]);
  117.  
  118. getchar();
  119. return ;
  120. }

● 输出结果(临时改为排序 64 个元素,每行显示 16个)

  1. , ,,,,,,, ,,,,,,,,
  2. ,,, ,,, ,,,,,,,,,,
  3. ,, ,,,,,,,, ,,,, ,,
  4. ,, ,,,,,,,,,,,,, ,
  5.  
  6. , , , , , , , , , , ,,,,,,
  7. ,,,,,,,,,,,,,,,,
  8. ,,,,,,,,,,,,,,,,
  9. ,,,,,,,,,,,,,,,,

OpenCL 双调排序 CPU 版的更多相关文章

  1. OpenCL 双调排序 GPU 版

    ▶ 参考书中的代码,写了 ● 代码,核函数文件包含三中算法 // kernel.cl __kernel void bitonicSort01(__global uint *data, const ui ...

  2. DirectX11 With Windows SDK--27 计算着色器:双调排序

    前言 上一章我们用一个比较简单的例子来尝试使用计算着色器,但是在看这一章内容之前,你还需要了解下面的内容: 章节 26 计算着色器:入门 深入理解与使用缓冲区资源(结构化缓冲区/有类型缓冲区) Vis ...

  3. 【转载】双调排序Bitonic Sort,适合并行计算的排序算法

    双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU.fpga来计算. 1.双调序列 在了解双调排序算法之前,我们先来看看什么是双调序 ...

  4. 三十分钟理解:双调排序Bitonic Sort,适合并行计算的排序算法

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 双调排序是data-indepen ...

  5. tensorflow安装过程cpu版-(windows10环境下)---亲试可行方案

    tensorflow安装过程cpu版-(windows10环境下)---亲试可行方案   一, 前言:本次安装tensorflow是基于Python的,安装Python的过程不做说明 二, 安装环境: ...

  6. Windows7下安装cpu版的Tensorflow

    windows7下安装python3.5 1.下载python-3.5.2-amd64.whl https://www.python.org/downloads/release/python-352/ ...

  7. 教你从头到尾利用DQN自动玩flappy bird(全程命令提示,GPU+CPU版)【转】

    转自:http://blog.csdn.net/v_JULY_v/article/details/52810219?locationNum=3&fps=1 目录(?)[-] 教你从头到尾利用D ...

  8. Ubuntu16.04下caffe CPU版的详细安装步骤

    一.caffe简介 Caffe,是一个兼具表达性.速度和思维模块化的深度学习框架. 由伯克利人工智能研究小组和伯克利视觉和学习中心开发. 虽然其内核是用C++编写的,但Caffe有Python和Mat ...

  9. CentOS 7 下使用虚拟环境Virtualenv安装Tensorflow cpu版记录

    1.首先安装pip-install 在使用centos7的软件包管理程序yum安装python-pip的时候会报一下错误: No package python-pip available. Error ...

随机推荐

  1. BZOJ4475: [Jsoi2015]子集选取【找规律】【数学】

    Description Input 输入包含一行两个整数N和K,1<=N,K<=10^9 Output 一行一个整数,表示不同方案数目模1,000,000,007的值. Sample In ...

  2. Laravel学习之旅(二)

    控制器 一.怎么编写控制器? 1.控制器文件存放路径:app\Http\Controllers: 2.命名规范如:TestController.php 3.完整的控制器例子如下: <?php n ...

  3. WPF开源界面库及控件

    WPF开源项目 WPF有很多优秀的开源项目,我以为大家都知道,结果,问了很多人,其实他们不知道.唉,太可惜了! 先介绍两个比较牛逼的界面库 1.MaterialDesignInXamlToolkit ...

  4. hdu1301 Jungle Roads 最小生成树

    The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was s ...

  5. 使用webpack搭建vue项目中遇到的问题

    1:data数据文件经试验,需要放在生成的build文件夹中才能生效,但是应该把data文件夹先放在src中,然后如何定义config文件,让其复制过去? new CopyWebpackPlugin( ...

  6. python、java大作战,python测试dubbo接口

    很多小伙伴都反映公司要求测dubbo(dubbo是一个java的分布式开源框架)接口,不会写java代码,怎么测,能不能用python来调dubbo接口.当然是可以的了,最近研究了一下,很简单,分享给 ...

  7. shell教程-001:shell简介 什么是shell,shell命令的两种执行方式

    Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的. Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解 ...

  8. c# list排序的三种实现方式 (转帖)

    用了一段时间的gridview,对gridview实现的排序功能比较好奇,而且利用C#自带的排序方法只能对某一个字段进行排序,今天demo了一下,总结了三种对list排序的方法,并实现动态传递字段名对 ...

  9. Kibana安装及使用

    1.Kibana介绍Kibana是一个基于浏览器页面的Elasticsearch前端展示工具.Kibana全部使用HTML语言和Javascript编写的. 2.安装配置Kibana下载地址:http ...

  10. Monit安装与配置

    Monit安装与配置 monit 监控并自动重启服务 官方文档