线程在排序方面也有特殊的应用,我们可以把要排序的数都为其创建一个线程,根据数的值对其进行延时操作,线程中的值越大,其结束的越晚,里面的数出来的也越晚,所以自然可以将数据排出序来,当然,若数据较多,会十分消耗计算机资源,所以也是图一乐的一种思想,具体代码如下:
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<string.h>
int data[100]={0};//储存乱序数
void* fun_1(void *agv)//用于实现按数倒计时
{
usleep((*(int*)(agv))*10000);//us级的时间会影响准确度,所以做一些延长
printf("%d ",*(int*)(agv));
return 0;
}
int main(void)
{
pthread_t a[10];
int i=0;
int j=0;
void *ret=NULL;
printf("please input your data (enter '1' three time to end)\n");
while(1)
{
scanf("%d ",&data[i]);//获取输入的乱序数
if(data[i]==1 && data[i-1]==1)
{
break;
}
i++;
}
printf("ending input\n");
for(j=0;j<i;j++)
{
pthread_create(&a[j],NULL,fun_1,&data[j]);//创造倒计时线程
}
sleep(1);
for(j=0;j<i;j++)
{
pthread_join(a[j],ret);
}
return 0;
}
值得注意的是,以上排序不能计算负数,如果数据过大效率也会下降,所以仅仅作为启发代码使用,当然,以上问题可以通过优化来解决,比如负数的排序,可以通过增加判断以及取反来实现;而数字过大也可以通过取对数来实现,作为一条懒狗,我这里就不献丑了