首页 文章详情

糟糕的C语言睡眠排序算法

嵌入式Linux | 275 2021-12-01 09:06 0 0 0
UniSMS (合一短信)

不知道大家知道这个算法没有,就是靠睡觉完成排序的。


比如数字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;
}


代码输出:







最后,如果觉得不错,大家顺手点个赞,转发就是对我最大的鼓励和支持!


长按识别二维码关注公众号

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter