#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");
}
运行结果