操作系统:Multithreaded Sorting Application

本文介绍了使用C语言实现的多线程并行排序(快速排序与归并排序),通过分解任务到多个线程,展示了如何提高原始数组的排序效率。通过创建`Sort`和`mergeSort`两个线程函数,分别负责子数组的排序,最后合并结果。代码实例详细展示了如何利用`pthread`库进行线程管理和同步。
摘要由CSDN通过智能技术生成
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>


typedef struct{
	int start;
	int end;
}parameters;

int originList[10] = {7,12,19,3,18,4,2,6,15,8};
int sortedList[10] = {0};
int i,j;
void* Sort(void *value);
void* mergeSort(void *value);
void* Sort(void *value){
	parameters* temp = (parameters*)value;
	int t;
	for(i = temp->start;i<=temp->end;i++){
		for(j = temp->start;j<=temp->end-1;j++){
			if(originList[j]>originList[j+1]){
				t = originList[j];
				originList[j] = originList[j+1];
				originList[j+1] = t;
			}
		}
	}
	return (void*)1;
}
void* mergeSort(void *value){
	parameters* temp = (parameters*)value;
	i = temp->start;
	int half = (j-i)/2,k = temp->start;
	j = half+1;
	while(i<=half && j<=temp->end){
		if(originList[i]<originList[j])
			sortedList[k++] = originList[i++];
		else
			sortedList[k++] = originList[j++];
	}
	while(i<=half){
		sortedList[k++] = originList[i++];
	}
	while(j<=temp->end){
		sortedList[k++] = originList[j++];
	}
	return (void*)1;
}
void main(){
	parameters* value = (parameters*)malloc(sizeof(parameters));
	value->start = 0;
	value->end = 9;
	parameters* value2 = (parameters*)malloc(sizeof(parameters));
	value2->start = 0;
	value2->end = 4;
	parameters* value3 = (parameters*)malloc(sizeof(parameters));
	value3->start = 5;
	value3->end = 9;

	pthread_t t_front,t_tail,t_merge;
	
	for(i = value->start;i<=value->end;i++)
		printf("%d ",originList[i]);
	printf("\n");
	pthread_create(&t_front,NULL,Sort,(void*)value2);
	pthread_create(&t_tail,NULL,Sort,(void*)value3);
	pthread_join(t_front,NULL);
	pthread_join(t_tail,NULL);

	pthread_create(&t_merge,NULL,mergeSort,(void*)value);
	pthread_join(t_merge,NULL);
	
	printf("sorted\n");
	for(i = value->start;i<=value->end;i++)
		printf("%d ",sortedList[i]);
	printf("\n");
}

运行结果
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值