不知道大家知道这个算法没有,就是靠睡觉完成排序的。
比如数字1 4 3,第一个数字1的时候,创建一个线程,然后让线程休眠1个时间单位,依次是 4 和 3个单位。
因为睡眠的时间不同,线程醒的时间也不同。3会比4先醒过来,这就完成了简单的排序。
如果在面试的时候,你想不起冒泡,想不起归并,也想不起快排,就偷偷懒,来一个睡觉也可以的排序算法试试。
不过这个算法的性能堪称史上最差,千万不要用在项目里面,被打的话,博主是不会负责医药费的哦。
我写的简单排序代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#define MAX 10
void *my_thread(void *arg){
int tmp = *(int*)arg;
usleep(tmp*1000);
printf("%d ",tmp);
}
int main()
{
int a[MAX] = {1,2,5,6,2,8,0,3,10,4};
int j = 0;
pthread_t thid[MAX];
for(j = 0;j<MAX;j++){
printf("%d ",a[j]);
}printf("\n");
for(j = 0;j<MAX;j++){
pthread_create(&thid[j],NULL,(void*)my_thread,&a[j]);
}
for(j = 0;j<MAX;j++){
pthread_join(thid[j],NULL);
}
printf("\n");
return 0;
}
代码输出:
长按识别二维码关注公众号