为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

皈依舞 2022-07-15 14:10:58
qsort头文件已经给出了,该如何实现快速排列(qsort)?
查看完整描述

3 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

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了。


查看完整回答
反对 回复 2022-07-18
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

你好#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]);//降序,这个值取负则为升序



查看完整回答
反对 回复 2022-07-18
?
收到一只叮咚

TA贡献1821条经验 获得超5个赞

#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;
}


查看完整回答
反对 回复 2022-07-18
  • 3 回答
  • 0 关注
  • 211 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号