OpenMP之枚举排序
// EnumSort.cpp : 定义控制台应用程序的入口点。
//枚举排序
/*
枚举排序(Enumeration Sort)是一种最简单的排序算法,通常也称为秩排序(Rank Sort)。
该算法的具体思想是(假设按关键字递增排序),对每一个待排序的元素统计小于它的所有元素的个数,从而得到该元素最终处于序列中的位置。
假定待排序的n个数存在a[1]…a[n]中。首先将a[1]与a[2]…a[n]比较,记录比其小的数的个数,令其为k,
a[1]就被存入有序的数组b[1]…b[n]的b[k+1]位置上;然后将a[2]与a[1],a[3]…a[n]比较,记录比其小的数的个数,依此类推。
这样的比较操作共n(n-1)次,所以串行秩排序的时间复杂度为O(n2)。
*/
#include "stdafx.h"
#include <Windows.h>
#include <omp.h>
#include <time.h>
#include <iostream>
using namespace std; #define NUM_THREADS 2
#define maxN 100000
int _tmain(int argc, _TCHAR* argv[])
{
int i,j,k;
clock_t t1,t2;
omp_set_num_threads(NUM_THREADS);
int a[maxN];//={0,4,9,6,1,5,3,8,7,2};
int b[maxN];
//并行——————————;
for (i=0;i<maxN;i++)
{
a[i]=maxN-i;
}
t1=clock();
#pragma omp parallel sections private(i,j,k)
{
/*#pragma omp for
for (i=0;i<maxN;i++)
{
k=0;
for (j=0;j<maxN;j++)
{
if (a[i]>a[j])
{
k++;
}
}
b[k]=a[i];
}*/
#pragma omp section
{
for (i=omp_get_thread_num();i<maxN;i=i+NUM_THREADS)
{
k=0;
for (j=0;j<maxN;j++)
{
if (a[i]>a[j])//找出数组中比自己小的元素的个数k;
{
k++;
}
}
b[k]=a[i];//另外建立一个数组,将其放到第k+1处;
}
}
#pragma omp section
{
for (i=omp_get_thread_num();i<maxN;i=i+NUM_THREADS)
{
k=0;
for (j=0;j<maxN;j++)
{
if (a[i]>a[j])
{
k++;
}
}
b[k]=a[i];
}
}
}
t2=clock();
cout<<"并行时间:"<<t2-t1<<endl;
for (i=99900;i<maxN;i++)
{
cout<<b[i]<<" ";
}
cout<<endl; //串行————————————;
for (i=0;i<maxN;i++)
{
a[i]=maxN-i;
}
t1=clock();
for (i=0;i<maxN;i++)
{
k=0;
for (j=0;j<maxN;j++)
{
if (a[i]>a[j])
{
k++;
}
}
b[k]=a[i];
}
t2=clock();
cout<<"串行时间:"<<t2-t1<<endl;
for (i=99900;i<maxN;i++)
{
cout<<b[i]<<" ";
}
cout<<endl;
system("pause");
return 0;
}
运行结果如下图:(相对加速比:1.72)
OpenMP之枚举排序的更多相关文章
- 枚举+排序|神奇算式|2014年蓝桥杯A组题解析第三题-fishers
标题:神奇算式 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成. 比如: 210 x 6 = 1260 8 x 473 = 3784 27 x 81 = 2187 都符合要求. ...
- OpenMP 奇偶换排序
▶ 使用 OpenMP 进行奇偶交换排序 ● 代码 #include <stdio.h> #include <stdlib.h> #include <omp.h> ...
- Word Amalgamation(枚举 + 排序)
Word Amalgamation Time Limit: 1 Sec Memory Limit: 64 MB Submit: 373 Solved: 247 Description In mil ...
- 基于 OpenMP 的奇偶排序算法的实现
代码: #include <omp.h> #include <iostream> #include <cstdlib> #include <ctime> ...
- sicily 1046. Plane Spotting(排序求topN)
DescriptionCraig is fond of planes. Making photographs of planes forms a major part of his daily lif ...
- 【uva 1312】Cricket Field(算法效率--技巧枚举)
题意:一个 L*R 的网格里有 N 棵树,要求找一个最大空正方形并输出其左下角坐标和长.(1≤L,R≤10000, 0≤N≤100) 解法:枚举空正方形也就是枚举空矩阵,先要固定一个边,才好继续操作. ...
- USACO(含training section)水题合集[5/未完待续]
(1) USACO2.1 Ordered Fractions 枚举 排序即可,注意1/1 #include<iostream> #include<cstdio> #includ ...
- CUBRID学习笔记 25 数据类型2
---恢复内容开始--- 6枚举类型 语法 <enum_type> : ENUM '(' <char_string_literal_list> ')' <char_str ...
- uva331 - Mapping the Swaps
Mapping the Swaps Sorting an array can be done by swapping certain pairs of adjacent entries in the ...
随机推荐
- LDAP与禅道
一:搭建禅道做测试 搭建过程参考http://www.cnblogs.com/hiyu/p/5841650.html 1):下载 ZenTaoPMS.Pro5.5.1.zbox_64.tar.gz ...
- IE6/IE7/IE8兼容H5标签
可以使用html5shiv(html5shiv主要解决HTML5提出的新元素不被IE6-8识别,这些新元素不能作为父节点包裹子元素,并且不能应用CSS样式)来解决 <!--[if lt IE 9 ...
- iOS 键盘类型
版权声明:本文为博主原创文章.请尊重作者劳动成果,转载请注明出处. UIKeyboardTypeDefault: UIKeyboardTypeASCIICapable: UIKeyboardTypeN ...
- qt5中QPrinter的使用兼容性问题
qt5与qt4在QPrinter中使用的不同点如下: 在.pro文件中加入如下语句:
- Linux下查看IP的命令:ifconfig -a
按照指南实践,在NFS挂载测试和tftp服务器架设时,均需用到本机的IP地址,怎么查看呢? 很简单,键入命令:ifconfig -a 这个命令具体是怎么定义的呢?有时间再查阅,先跑遍指南.
- java多线程详解(3)-线程的互斥与同步
前言:前一篇文章主要描述了多线程中访成员变量与局部变量问题,我们知道访成员变量有线程安全问题,在多线程程序中 我们可以通过使用synchronized关键字完成线程的同步,能够解决部分线程安全问题 在 ...
- 第二章 Mybatis代码生成工具
1.mybatis-generator作用 1).生成pojo 与 数据库结构对应 2).如果有主键,能匹配主键 3).如果没有主键,可以用其他字段去匹配 4).动态select,update,del ...
- BPTT算法推导
随时间反向传播 (BackPropagation Through Time,BPTT) 符号注解: \(K\):词汇表的大小 \(T\):句子的长度 \(H\):隐藏层单元数 \(E_t\):第t个时 ...
- 安装 CentOS 后的系统配置及软件安装备忘
安装 CentOS 后的系统配置及软件安装备忘 // */ // ]]> 安装 CentOS 后的系统配置及软件安装备忘 Table of Contents 1 Linux 自举过程 1.1 ...
- onethink和thinkphp3.2学习
thinkphp发布3.2版本之后,也发布了一个简单的内容管理系统onthink,这样有助于理解thinkphp3.2的使用: 一.首先最关键的一点是thinkphp3.2中加入了命名空间的使用 什么 ...