微博预计要火一阵的SleepSort之Shell及C实现

今日在微博看到如此奇妙的代码。竟然还有新的sort算法,对于我这样的渣渣必须研究一下,代码例如以下:

#!/bin.bash
function f()
{sleep "$1" //sleep 这么多secho "$1"
}while [ -n "$1" ] //第一个參数不为空
dof "$1" & //后台执行,相当于fork一个进程去执行f, 父进程同一时候继续下去shift //输入參数左移。也即覆盖掉第一个參数
donewait//父进程等待子进程都结束了再继续往下,否则子进程成为孤立进程




SleepSort。一看代码,看到sleep大致就明确意图了,利用sleep,以及多线程并发。依照sleep大小排序,并发来print排序


这个算法本质上是并发的算法,运用了sleep函数,同一时候几个进程并发,并发是指几个进程同一时间段同一时候运行,一个时刻还是要排个序逐个运行的,而并行是须要硬件支持的,真正的同一时刻多个进程同一时候运行。


于是乎本菜鸟打算C语言搞一搞,由于借助linux的fork函数来模拟 shell里面 &的后台执行功能。另外上述代码接口不太好,最好是传递数组參数这样的的,于是我写个接口比較general的C版
另外这里面要注意就是shell wait等前面子进程所有结束,父进程才继续。我用C总是输出第一个数父进程就返回了,差了C的文档才知道,他是随意一个child返回父进程就返回了。因此多次wait 用个loop。


代码(*nix OS only):
#include <iostream>
#include <sys/wait.h>
using namespace std;void f(int x)
{sleep(x);cout<<x<<" ";
}
void SleepSort(int*a, int n)
{int status;pid_t pid;for(int i=0;i<n;i++){pid=fork();if(pid==0)//child process, return 0 pid{f(a[i]);return;}else//father process return pid>0{;}}for(int i=0;i<n;i++)wait(NULL);//each wait one child process, then continue
}
int main()
{int a[]={6,2,5,8,5,4,7,1};SleepSort(a,8);
}




依照这个思想。事实上不论什么并行的技术理论都能够实现sleepsort,比如CUDA,openmp, mpi等等,我这里弄个并发版本号。


另外确实要用最小单位s的sleep函数。略微注意一下就好了~~~ 以下博客说的比較清楚~~~

http://blog.csdn.net/changingivan/article/details/6966510

收到这个启示,这个算法有个缺陷。假设排序的树interval非常小,比如1.1 1.11这样的,也可能有危急。最小sleep差比一次loop时间长是关键


今天一个马来人说非常崇拜中国的gymnastics,我第一反应geometry, 后来才知道体操。。另外一个阿三教了我一点rude english,之前一直问我what's up?这个是非常标准的美式口语.......今天竟然说了I need a chick, 我已開始以为是trick,可是也说不通。他说,假设说一个女生是chick是非常粗鲁的,还有barbanic 也是粗鲁的意思。


Good night, bitch! Get your life 享受生活,别那么书呆。Working hard,no,  hardly working. 


转载于:https://www.cnblogs.com/gccbuaa/p/6897224.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

相关类以及常用方法

1、system&#xff1a;(系统相关类&#xff09; 常用方法&#xff1a; a) : system.arraycopy(制定数组&#xff0c;开始复制的位置&#xff0c;目标数组&#xff0c;开始粘贴的位置&#xff0c;需要复制的长度) 。 将指定源数组中的数组从指定位置复制到目标数组的指定位…

2021-11-15

本文将重点围绕国产CPU的发展历程与当前产业链各领军企业的布局情况作详尽解读&#xff08;并包含特大号独家整理的最新进展&#xff09;&#xff0c;具体如下&#xff1a; 1、国产CPU发展历程回溯 2、飞腾&#xff1a;PK生态的主导者 3、鲲鹏&#xff1a;快速崛起的领导者 …

关于在ubuntu下配置AMD显卡驱动的总结

同样先卸载先前版本 代码:sudo sh /usr/share/ati/fglrx-uninstall.sh代码:sudo apt-get remove --purge fglrx fglrx_* fglrx-amdcccle* fglrx-dev*重启 代码:sudo reboot下载驱动&#xff0c;右边直接有ubuntu32位和64位驱动链接&#xff1a;http://support.amd.com/en-us/do…

Python3中的hasattr()

Python3已经将此内置函数移除了。查阅Python v3.0 documentation发现可以使用 hasattr(object, name)内置函数来完成callable的功能&#xff0c;方式如下&#xff1a; 3.0之前&#xff1a;callable(func) 3.0之后&#xff1a;hasattr(func, __call__) 这两者结果是相同的。 转载…

计算机结构简图

北桥,南桥是主板上芯片组中最重要的两块了.它们都是总线控制器.他们是总线控制芯片.相对的来讲,北桥要比南桥更加重要.北桥连接系统总线,担负着cpu访问内存的重任.同时连接这AGP插口,控制PCI总线,割断了系统总线和局部总线,在这一段上速度是最快的.南桥不和CPU连接通常用来作I/…

原始Ajax

var $ { request:function(obj){ //1. 获得xmlhttprequest对象兼容性处理 var xhr; //undefined未定义 try{ //主流浏览器里面的ajax对象 xhr new XMLHttpRequest(); }catch(e){ //IE低版本的浏览器 xhr new ActiveXObject("Microsoft.XMLHTTP"); } //2. 建立和…

Servlet 与 Ajax 交互一直报status=parsererror

Servlet 与 Ajax 交互一直报statusparsererror 原因&#xff1a;servlet 返回的数据不是 Json 格式 1、JS代码为&#xff1a; 1 var jsonStr {clusterNum:2,iterationNum:3,runTimes:4};2 $.ajax({3 type: "post",4 //http://172.2…

25LINQ拾遗及实例

投影 □ 遍历数组索引&#xff0c;Select获取 int[] indexes {0, 2}; string[] strs {"a", "b", "c", "d"}; var result from i in indexes select strs[i]; foreach (string str in result) { Console.Write(str " &quo…

国产CPU的6大品牌,3大路线对比

这些年来&#xff0c;中国最想发展的科技产品是什么&#xff1f;那必须是芯片&#xff0c;特别是2018年中兴事件、2019年华为事件之后&#xff0c;国内的芯片产业就彻底地火爆了起来。 按照数据显示&#xff0c;截止至2020年10月份&#xff0c;国内已经有27万家芯片企业&#…

BluePrint和ORM

一、蓝图创建 1 #引入库文件2 from flask import Blueprint,request,jsonify3 4 user Blueprint(5 "site",6 __name__,7 template_floder"templates_folder_path",8 static_floder"static" 9 ) #创建蓝图 10 1…

【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型

前文提要:【js实例】js中的5种基本数据类型和9种操作符 Array类型的9个数组方法 Array中有9个数组方法: 1.检测数组 2.转换方法 3.栈方法 4.队列方法 5.冲排序方法6.操作方法 7.位置方法 8.迭代方法 9.归并方法 在实例中介绍,实例如下 /* Array类型 js数组中的每一项可以用来保…

调用咏南中间件插件演示

function GetSvrData(const accountNo, defineId: WideString; inParams: OleVariant): OleVariant; virtual; abstract; // accountNo&#xff0c;帐套编号 // defineId3位插件编号2位自定义编号&#xff0c;defineId必须是唯一的 // inParams&#xff0c;TDataSet.Params的OL…

龙芯与飞腾roadmap

飞腾roadmap 龙芯roadmap 龙芯系列处理器芯片是龙芯中科技术有限公司研发的具有自主知识产权的处理器芯片&#xff0c;产品以32位和64位单核及多核CPU/SOC为主&#xff0c;主要面向国家安全、高端嵌入式、个人电脑、服务器和高性能机等应用。产品线包括龙芯1号小CPU、龙芯2号中…

vim 多窗口操作

1、打开多个窗口打开多个窗口的命令以下几个&#xff1a;横向切割窗口:new窗口名(保存后就是文件名) :split窗口名&#xff0c;也可以简写为:sp窗口名纵向切割窗口名:vsplit窗口名&#xff0c;也可以简写为&#xff1a;vsp窗口名2、关闭多窗口可以用&#xff1a;q!&#xff0c;…

BZOJ 2440 完全平方数(莫比乌斯-容斥原理)

题目链接&#xff1a;http://61.187.179.132/JudgeOnline/problem.php?id2440 题意&#xff1a;给定K。求不是完全平方数&#xff08;这里1不算完全平方数&#xff09;的倍数的数字组成的数字集合S中第K小的数字是多少&#xff1f; 思路&#xff1a;首先&#xff0c;答案不超过…

在Eclipse中添加JDK源码包

一直有这想要在Eclipse直接阅读JDK的需求&#xff0c;之前用的都是反编译的&#xff0c;由于我用的反编译的插件去掉了源码内容的注释&#xff0c;所以想直接导入JDK源码包&#xff1a; 详细步骤&#xff1a; 打开Eclipse, 菜单栏 选择 Window 下拉种选取 Preferences 窗口. 以…

南桥芯片与北桥芯片

什么是芯片组 芯片组&#xff08;英语&#xff1a;Chipset&#xff09;是一组共同工作的集成电路“芯片”&#xff0c;并作为一个产品销售。它负责将计算机的微处理器和计算机的其他部分相连接&#xff0c;是决定主板级别的重要部件。以往&#xff0c;芯片组由多颗芯片组成&am…

spark 应用场景2-身高统计

原文引自&#xff1a;http://blog.csdn.net/fengzhimohan/article/details/78564610 a. 案例描述 本案例假设我们需要对某个省的人口 (10万) 性别还有身高进行统计&#xff0c;需要计算出男女人数&#xff0c;男性中的最高和最低身高&#xff0c;以及女性中的最高和最低身高。本…

阿里云OSS linux使用备忘录

ossutil config example: accessKeyId "AccessKeyId"; accessKeySecret "AccessKeySecret"; ###以上两个在 https://help.aliyun.com/knowledge_detail/38738.html endPoint "http://oss-cn-beijing.aliyuncs.com";转载于:https://www.cnblog…

缠绕多年的PCIE通道数问题终于完全明白了,欢迎指正

CPU的PCIE通道数&#xff0c;之前一直都是一个众说纷纭的问题很多人都会问到&#xff0c;主板上不同的M.2接口&#xff0c;接SSD性能是否一样&#xff0c;接太多的SSD&#xff0c;是否会占用显卡的PCIE带宽&#xff0c;今天我又看了几篇网上的文章&#xff0c;终于十分清楚地搞…