微博預計要火一陣的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.pswp.cn/news/252626.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252626.shtml
英文地址,請注明出處:http://en.pswp.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;終于十分清楚地搞…