日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

count_sort计数排序OpenMP的并行化

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 count_sort计数排序OpenMP的并行化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡述

計數排序,就是統計某個數值在所有的數字中所應該存在的位置,然后,放到一個確定的位置上。非常簡單的排序算法。

程序

  • 會讀取data.txt中的文件
  • 數據的樣子
10 0 2 3 1 4 8 6 7 5 9
  • 效果
PS D:\C++\VS\repo\OpenMP-TEST\Debug> ./OpenMP-TEST 0 1 2 3 4 5 6 7 8 9
  • 代碼
#include <iostream> #include <omp.h> #include <fstream> using namespace std; #pragma warning(disable : 4996) int main(int argc, char **argv) {if (argc < 1) return 0;ifstream cin("./data.txt");int i, j, count, n;cin >> n;int *a = new int[n];int *temp = new int[n];//int thread_count = strtol(argv[1], NULL, 10);for (i = 0; i < n; ++i) cin >> a[i];#pragma omp parallel for private(i, j, count) shared(n, a, temp)for (i = 0; i < n; ++i) {count = 0;for (j = 0; j < n; ++j) {if (a[j] < a[i]) count++;else if (a[j] == a[i] && j < i) count++;}temp[count] = a[i];}#pragma omp parallel for for (i = 0; i < n; ++i) a[i] = temp[i];for (i = 0; i < n; ++i) cout << a[i]<< " ";cout << endl;delete[]temp;delete[]a; }

和串行的計數排序進行對比

  • 不要輸出排序結果,因為數據量太大了。
  • 10000個數據的排序效果
PS D:\C++\VS\repo\OpenMP-TEST\Debug> ./OpenMP-TEST r Total time Serial: 1.256s Total time parallel: 0.141s
  • 接近9倍的速度(因為我在筆記本上有8個核)
  • 后面多了一個r命令,其實是免得在vs編譯的時候被調用。隨便寫什么都是ok的。
#include <iostream> #include <omp.h> #include <fstream> #include <ctime> using namespace std; #pragma warning(disable : 4996) int main(int argc, char **argv) {if (argc < 2) return 0;ifstream cin("./data.txt");int i, j, count, n;cin >> n;int *a = new int[n];int *b = new int[n];int *temp = new int[n];//int thread_count = strtol(argv[1], NULL, 10);for (i = 0; i < n; ++i) cin >> b[i];for (i = 0; i < n; ++i) a[i] = b[i];clock_t starttime, endtime;starttime = clock();for (i = 0; i < n; ++i) {count = 0;for (j = 0; j < n; ++j) {if (b[j] < b[i]) count++;else if (b[j] == b[i] && j < i) count++;}temp[count] = b[i];}memcpy(b, temp, n * sizeof(int));endtime = clock();// for (i = 0; i < n; ++i) cout << b[i] << " ";// cout << endl;cout << "Total time Serial: " << (double)(endtime - starttime) / CLOCKS_PER_SEC << "s" << endl;starttime = clock(); #pragma omp parallel for private(i, j, count) shared(n, a, temp)for (i = 0; i < n; ++i) {count = 0;for (j = 0; j < n; ++j) {if (a[j] < a[i]) count++;else if (a[j] == a[i] && j < i) count++;}temp[count] = a[i];}#pragma omp parallel for for (i = 0; i < n; ++i) a[i] = temp[i];endtime = clock();//for (i = 0; i < n; ++i) cout << a[i]<< " ";//cout << endl;cout << "Total time parallel: " << (double)(endtime - starttime) / CLOCKS_PER_SEC << "s" << endl;delete[]temp;delete[]a;delete[]b; }

和qsort的串行版也做對比

#include <iostream> #include <omp.h> #include <fstream> #include <ctime> using namespace std; #pragma warning(disable : 4996) int cmp(const void * a, const void *b) //from small to big {return *(int *)a - *(int *)b; }int main(int argc, char **argv) {if (argc < 2) return 0;ifstream cin("./data.txt");int i, j, count, n;cin >> n;int *a = new int[n];int *b = new int[n];int *c = new int[n];int *temp = new int[n];//int thread_count = strtol(argv[1], NULL, 10);for (i = 0; i < n; ++i) cin >> b[i];for (i = 0; i < n; ++i) { a[i] = b[i]; c[i] = b[i]; }clock_t starttime, endtime;starttime = clock();qsort(c, n, sizeof(int), cmp);endtime = clock();cout << "Total time Serial-qsort: " << (double)(endtime - starttime) / CLOCKS_PER_SEC << "s" << endl;starttime = clock();for (i = 0; i < n; ++i) {count = 0;for (j = 0; j < n; ++j) {if (b[j] < b[i]) count++;else if (b[j] == b[i] && j < i) count++;}temp[count] = b[i];}memcpy(b, temp, n * sizeof(int));endtime = clock();cout << "Total time Serial: " << (double)(endtime - starttime) / CLOCKS_PER_SEC << "s" << endl;starttime = clock(); #pragma omp parallel for private(i, j, count) shared(n, a, temp)for (i = 0; i < n; ++i) {count = 0;for (j = 0; j < n; ++j) {if (a[j] < a[i]) count++;else if (a[j] == a[i] && j < i) count++;}temp[count] = a[i];}#pragma omp parallel for for (i = 0; i < n; ++i) a[i] = temp[i];endtime = clock();//for (i = 0; i < n; ++i) cout << a[i]<< " ";//cout << endl;cout << "Total time parallel: " << (double)(endtime - starttime) / CLOCKS_PER_SEC << "s" << endl;delete[]temp;delete[]a; }

總結

以上是生活随笔為你收集整理的count_sort计数排序OpenMP的并行化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩中文字幕在线播放 | 久久无毛 | 亚洲jlzzjizz少妇 | 相亲对象是问题学生动漫免费观看 | 天天干天天干天天干天天 | 97色婷婷 | 欧美成人精品欧美一级私黄 | 成人欧美视频 | 亚洲AV无码精品一区二区三区 | 少妇饥渴放荡91麻豆 | 亚洲区色 | 国产成人无码精品久久久电影 | 国产精品成人一区二区网站软件 | 污片网站在线观看 | 一区二区三区视频在线免费观看 | 国产一级免费片 | 国产高清在线不卡 | 99热免费| 激情毛片视频 | 未满十八18禁止免费无码网站 | 成人网站免费观看 | 国产一级美女 | 精品一区电影 | 麻豆tv在线 | 精品人妻一区二区色欲产成人 | 久久av一区二区三区漫画 | 国产一区二区免费电影 | 51精品国自产在线 | 男人草女人 | 日本三级免费看 | 熟睡侵犯の奶水授乳在线 | 免费插插视频 | 韩国美女啪啪 | 精品国产1区 | 性欧美videos另类艳妇3d | 69精品在线 | 久久精品人妻一区二区三区 | 无码国产69精品久久久久网站 | 欧美xxx在线观看 | 中国丰满老妇xxxxx交性 | 国产精品视频区 | 国产欧美久久久精品免费 | 中国老熟妇自拍hd发布 | 亚洲成人av电影在线 | 欧美日本成人 | 伊人影院在线观看视频 | 欧美在线网| 日日淫| 欧美电影一区二区三区 | 美色视频| 久久人人精 | 欧美精品一区二区三区三州 | 欧美日韩视频一区二区三区 | 国产区精品视频 | 国产性一乱一性一伧一色 | 黄色草逼视频 | 成人黄色免费网 | 黄色污污视频软件 | 国产精品成人免费视频 | 91精品久久久久久粉嫩 | 五月激情六月 | 伊人成年综合网 | 欧美色图一区二区 | 午夜院线 | 黑人糟蹋人妻hd中文字幕 | 天堂俺去俺来也www久久婷婷 | 草av在线 | 欧美顶级metart裸体全部自慰 | www国产在线观看 | 国产小视频自拍 | 日本男女激情视频 | 亚洲永久免费视频 | 性欧美hd调教 | 国产人妻aⅴ色偷 | 日韩黄色免费视频 | 久久精品欧美日韩精品 | www一级片 | 欧美一区二区三区久久妖精 | 极品探花在线播放 | 五月婷婷社区 | 欧美日韩一区二区电影 | 日韩精品亚洲一区 | 久草视频这里只有精品 | 男女深夜福利 | 任你操精品| 亚洲影视一区 | 操丰满女人 | 欧美日韩一级二级三级 | sm久久捆绑调教精品一区 | 老女人性生活视频 | 国产女人18毛片水真多18 | 夜夜爱夜夜操 | 天天躁日日躁aaaa视频 | 亚洲狼人av | 激情第四色 | 欧美成人精品在线视频 | 国产精品99久久久久久久久 | 黄色污小说| 好男人香蕉影院 |