请问该如何利用pthread实现快速排列(qsort) ?

qsort头文件已经给出了,该如何实现快速排列(qsort)?

皈依舞
浏览 212回答 3
3回答

慕妹3242003

struct sortdata //存放线程的函数mysort的数据{int a[10];int n;}mydata;void *mysort(void * data){sort(data->a, data->n); //qsort 里面的sort函数。return 0;}void myexit() //按任意键退出。或者随便来个别的功能也一样。多线程嘛。{getchar();}int main(){int a[10] = {5, 3, 1, 2, 7, 9, 6, 8, 4, 0};pthread_t t1;mydata.n = 10;mydata.a = a;if(pthread_create(&t1, NULL, mysort, (void*)&data))perror("thread create failed.\n");myexit(0);return 0;}我也不知道你qsort的参数是什么。大概就这意思,楼主能看明白吧。代码纯手打,不过没运行过,你试试吧。大概意思就是2个函数并行执行,一边查看你是否有输入,一边排序,如果你数组够大的话,比如100000,可能更加明白。你按一下任意键 马上就强制退出不sort了。

芜湖不芜

你好#include"stdafx.h"/* QSORT.C: This program reads the command-line* parameters and uses qsort to sort them. It* then displays the sorted arguments.*/#include<stdlib.h>#include<string.h>#include<stdio.h>int compare( const void *arg1, const void *arg2 );void main( int argc, char **argv ){char a[255]="1723649\0";int k=strlen(a);qsort((void *)a,(size_t)strlen(a),sizeof(char),compare);printf ("%s",a);}int compare( const void *arg1, const void *arg2 ){return -(((char *)arg1)[0]-((char*)arg2)[0]);//降序,这个值取负则为升序}&nbsp;

收到一只叮咚

#include <stdio.h>#include <stdlib.h>#include <pthread.h>/*定义排序工作线程函数参数结构体*/typedef struct _qsort_parm{int *array;int low;int high;} qsort_parm_t;/*分段*/int partition(int *array,int low, int high){int pivot = *(array + low);while (low < high){while ( low < high && array[high] >= pivot){high--;}*(array + low) = *(array + high);while(low < high && array[low] <= pivot){low++;}*(array + high) = *(array + low);}*(array + low) = pivot;return low;}/*线程执行函数*/void *quicksort_worker (void *parm){pthread_t corpid;qsort_parm_t *iparm = (qsort_parm_t *) parm;int keypos = 0;qsort_parm_t qparm;void *ret;if (iparm->low < iparm->high){/*分段*/keypos = partition(iparm->array,iparm->low,iparm->high);qparm.array = iparm->array;qparm.low = iparm->low;qparm.high = keypos - 1;/*创建子线程处理前半段*/pthread_create(&corpid,NULL,quicksort_worker,&qparm);iparm->low = keypos + 1;/*本线程处理后半段*/quicksort_worker(iparm);/*等待子线程结束*/pthread_join(corpid,&ret);}}void quicksort_multithread(int *pA,int low,int high){qsort_parm_t qparm;qparm.array = pA;qparm.low = low;qparm.high = high;quicksort_worker(&qparm);}int main (void){int array[20] = {9,8,0,1,4,7,6,2,3,5,19,11,18,16,10,22,38,45,14,21};int i = 0;quicksort_multithread(array,0,19);for (i = 0;i < 20;i ++){printf ("%d ",array[i]);}return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP