微博预计要火一阵的SleepSort之Shell及C实现
今日在微博看到如此奇妙的代码。竟然还有新的sort算法,对于我这样的渣渣必须研究一下,代码例如以下:
#!/bin.bash
function f()
{
sleep "$1" //sleep 这么多s
echo "$1"
} while [ -n "$1" ] //第一个參数不为空
do
f "$1" & //后台执行,相当于fork一个进程去执行f, 父进程同一时候继续下去
shift //输入參数左移。也即覆盖掉第一个參数
done wait//父进程等待子进程都结束了再继续往下,否则子进程成为孤立进程
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.
微博预计要火一阵的SleepSort之Shell及C实现的更多相关文章
- 去中心化类微博应用 mastodon
一句话重点,去中心,没监管,自己对自己信息做主,没人随便删你消息的分布式社交应用 mastodon. 建了一个实例, https://cncs.io 来专门讨论计算机相关信息,欢迎大家注册来玩.已有用 ...
- 马云18年前制止偷井盖视频走红 2013-05-10 11:00:37 来源: 新快报(广州) 有0人参与 分享到 网易微博 新浪微博 腾讯空间 人人网 有道云笔记 在一次访谈中,即将卸任阿里巴巴CEO的马云自曝了他第一次上电视是在1995年。“我刚开始创
马云18年前制止偷井盖视频走红 2013-05-10 11:00:37 来源: 新快报(广州) 有0人参与 分享到 网易微博 新浪微博 腾讯空间 人人网 有道云笔记 在一次访谈中,即将卸任阿里巴巴 ...
- Java程序员秋招面经大合集(BAT美团网易小米华为中兴等)
Cvte提前批 阿里内推 便利蜂内推 小米内推 金山wps内推 多益网络 拼多多学霸批 搜狗校招 涂鸦移动 中国电信it研发中心 中兴 华为 苏宁内推 美团内推 百度 腾讯 招商银行信用卡 招银网络科 ...
- 一个JAVA渣渣的校招成长记,附BAT美团网易等20家面经总结
欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享美文,分享各种Java学习资源,面试题,以及企业级Java实战项目回复关键字免费领取): 今天分享一篇牛客网上的一个 ...
- 创造tips的秘籍——PHP回调后门
作者:Phithon 原文连接:https://www.leavesongs.com/PENETRATION/php-callback-backdoor.html 最近很多人分享一些过狗过盾的一句话, ...
- 96、facebook Fresco框架库源使用基础
开源项目链接 facebook Fresco仓库:git clone https://github.com/facebook/fresco facebook Fresco主页:“>http:// ...
- 齐B小短裙
女模周蕊微博引关注 火了齐B小短裙毁了干爹[图]_网易新闻中心 齐B小短裙
- 96、facebook Fresco框架库源使用(转载)
各个属性详情:http://blog.csdn.net/y1scp/article/details/49245535 开源项目链接 facebook Fresco仓库:git clone https: ...
- AI创投的冰与火之歌:泡沫、跟风、短板和有钱花不出去的沮丧【转】
转自:http://36kr.com/p/5071386.html 国内的AI行业仍处于野蛮生长阶段.热钱不少,优质项目却不多.创业者拿钱难,投资者有钱却花不出去. 编者按:本文来自微信公众号“刺猬公 ...
随机推荐
- idea使用svn
一.在idea中配置svn 二.导出maven项目 连接svn 点击checkout 点击ok就可以 到Commit Changes 这里有几个选项需要了解的: Auto-update after c ...
- [BZOJ2017][Usaco2009 Nov]硬币游戏(要复习系列)
又是DP? 好吧,或者说是博弈论,但是我不会啊. 先搞个O(n^3)的记忆化搜索,然后瞎搞好像发现两个状态几乎一样? 竟然过了样例,然后竟然A了... #include<iostream> ...
- 【LOJ#10115,tyvj1473】校门外的树(第3次升级)
PS:思路来源于Clove_unique的博客,在此万分感谢 这道题可以用树状数组轻松过,然而...树状数组不太熟悉,还是用线段树比较好(虽然代码比较长) [思路分析] [一开始的思路] 最开始的错误 ...
- [CodeForces522B] Photo to Remember
某一天,n个朋友在一起聚会,他们已经很久没见了,于是他们决定拍照留念. 简单的说,拍照的时候,每个人有一个高度和宽度,第i个的高度和宽度分别是hi和wi.这些人排成一条直线,照片的最小的面积必须包含所 ...
- 【转载】JavaScript中同名标识符优先级-Snandy
一,局部变量先使用后声明,不影响外部同名变量 var x = 1; // --> 外部变量x function fn(){ alert(x); // --> undefined 局部变量x ...
- objectdatasouce的温故
在做ecxel的时候,需要前台做一个联动的效果. 记录一下这个数据源的用法,大学时候用的,忘得差不多了 首先就是往页面拖拽一个objectdatasouce的控件 然后配置数据源: 选择业务对象(其实 ...
- LinkedList 源码
1.类继承结构 结构: 2.成员及方法 注意:其中 getFirst,getLast,removeFirst,removeLast,el ...
- [Intermediate Algorithm] - Arguments Optional
题目 创建一个计算两个参数之和的 function.如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果. 例如,add(2, 3) 应该返回 5,而 ...
- HDU_1907_基础博弈nim游戏
John Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submis ...
- js 请求单个文件 并验证扩展名
function suffix(file_name) { var three=file_name.split("."); ]; return last; } $('#btnSear ...