linux下利用pthread做多线程归并排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux下利用pthread做多线程归并排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2112字,纯文字阅读大概需要4分钟。
内容图文
![linux下利用pthread做多线程归并排序](/upload/InfoBanner/zyjiaocheng/943/223b01ec30f14f86a84fbc84860e7197.jpg)
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
typedef struct ThreadData {
int start, end;//待排序的范围
int* array;//数组指针
int length;//数组的长度
}ThreadData;
//函数原型声明
void p_mergeSort(ThreadData* data);
void merge(int array[], int length, int left, int m, int right);
void mergeSort(int array[], int length, int start, int end);
//方便pthread_create调用,和mergesort之间做一个接口
void p_mergeSort(ThreadData* data)
{
mergeSort(data->array, data->length, data->start, data->end);
}
// 归并排序中的合并算法
void merge(int array[], int length, int left, int m, int right)
{
int* temp = (int*)malloc(sizeof(int) * length);
int i, j, k;
i = left;
j = m + 1;
k = 0;
for (; i <= m && j <= right;) {
if (array[i] < array[j]) {
temp[k++] = array[i++];
}
else {
temp[k++] = array[j++];
}
}
while (i <= m) {
temp[k++] = array[i++];
}
while (j <= m) {
temp[k++] = array[j++];
}
k = 0;
for (i = left; i <= right; i++) {
array[i] = temp[k++];
}
free(temp);
}
// 归并排序
void mergeSort(int array[], int length, int start, int end)
{
if (start < end) {
int i;
pthread_t tid1, tid2;
ThreadData data_left, data_right;
i = (end + start) / 2;
data_left.array = array;
data_left.length = length;
data_left.start = start;
data_left.end = i;
data_right.array = array;
data_right.length = length;
data_right.start = i+1;
data_right.end = end;
// 启动2个线程分别对左右两部分进行mergeSort
pthread_create(&tid1, NULL, (void*)p_mergeSort, (void*)& data_left);
pthread_create(&tid2, NULL, (void*)p_mergeSort, (void*)& data_right);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
// join等待完成后,再merge
merge(array, length, start, i, end);
}
}
int main() {
pthread_t tid;
int ret;
int array[] = {9,8,7,6,5,4,3,2,1,0};
ThreadData data;
data.array = array;
data.start = 0;
data.end = 9;
data.length = 10;
ret = pthread_create(&tid, NULL, (void*)p_mergeSort, (void*)&data);
if (ret) {
printf("Thread Create Error\n");
exit(0);
}
pthread_join(tid, NULL);
for (int i = 0; i < 10; i++) {
printf("%d ", array[i]);
}
printf("\n");
printf("Main Ends\n");
return 0;
}
编译命令:
gcc sort.c -o a -lpthread
运行结果:
内容总结
以上是互联网集市为您收集整理的linux下利用pthread做多线程归并排序全部内容,希望文章能够帮你解决linux下利用pthread做多线程归并排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。