微博预计要火一阵的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行业仍处于野蛮生长阶段.热钱不少,优质项目却不多.创业者拿钱难,投资者有钱却花不出去. 编者按:本文来自微信公众号“刺猬公 ...
随机推荐
- Ruby 各种离奇运算符
创建: 20170717 更新: 改变分类 Rails ---> Ruby 更新: 2017/10/16 增加&., #try 参考: 传送门 ||= a ||= b相当于 a = ...
- Greenplum使用教程
Greenplum简介 GreenPlum是一个关系型数据库集群.,它实际上是由多个独立的数据库服务组合成的逻辑数据库.GreenPlum是基于PostgreSQL(开源数据库)的分布式数据库,它采用 ...
- 【Python】循环语句
while循环 当条件成立时,循环体的内容可以一直执行,但是避免死循环,需要有一个跳出循环的条件才行. for循环 遍历任何序列(列表和字符串)中的每一个元素 >>> a = [&q ...
- POJ 1330 Tarjan LCA、ST表(其实可以数组模拟)
题意:给你一棵树,求两个点的最近公共祖先. 思路:因为只有一组询问,直接数组模拟好了. (写得比较乱) 原题请戳这里 #include <cstdio> #include <bits ...
- 5.13redis的相关基础
二.Redis(NoSql) Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行 100000个请求,读的速度是110000次/s,写的速 ...
- Jquery IE8兼容性
环境: jsp+jquery-1.11.1.min.js 问题描述: 使用$("#article标签id名").append(“xxxxxxxxx") ,chrome.f ...
- ThinkPHP5中的助手函数
load_trait:快速导入Traits,PHP5.5以上无需调用 /** * 快速导入Traits PHP5.5以上无需调用 * @param string $class trait库 * ...
- 苹果双系统win8.1遇到的一些问题
MacBook air是一款不错的电脑,详细没研究就不叙述好与坏了.只此记录自己使用这款笔记本遇到的问题. 一.安装双系统win8.1 1.下载镜像文件—>拷贝到ios内存中,一个8GU盘.ht ...
- IVVI SK3-02小骨酷派SK3-02 进入第三方 recovery 刷机 ROOT
首先下载好工具:http://url.cn/5AS7IiB 备用连接 :https://pan.baidu.com/s/1jJmbYAi 本篇教程教你如何傻瓜式解锁BootLoader并进入临时rec ...
- 八:前端---Vue下的国际化处理
1:首先安装 Vue-i8n npm install vue-i18n --save 注:-save-dev是指将包信息添加到devDependencies,表示你开发时依赖的包裹. -save是指将 ...