諸葛亮vs司馬懿,排序演算法大戰誰能笑到最後?

2021-10-24 22:48:39 字數 3907 閱讀 8669

公元234年,蜀漢丞相諸葛孔明再次北伐。

一日,與司馬仲達所率魏軍兩軍相峙,二人陣前舌戰。

司馬曰:「諸葛村夫,吾與汝相鬥數年,鬥兵鬥陣鬥謀略,均已疲乏。今日,何不一改陳規,鬥點新奇玩意?」

諸葛輕撫羽扇,言道:「仲達今日想比試些什麼?」

「你我各遣相等數量兵士,立作一排,再互派一人至對方軍前,看誰派遣之人先將這一排兵士按身高從低到高排序,誰就取勝,三局兩勝制,輸者撤軍五十里,如何?」

諸葛不答,只是一邊微笑,一邊慢搖羽扇。

司馬問道:「怎麼?怕了?」

諸葛笑曰:「為將者,不通天文,不識地理,不知奇門,不曉陰陽,不明兵勢, 不學演算法,庸才耳。此乃小兒遊戲,何怕之有?」

司馬亦笑曰:「匹夫休要狂言,且比來一看。」

雙方各自部署,第一輪,雙方皆出十人,少傾,列隊完畢。

蜀營王平:「丞相,末將請求出戰,以插入排序法破之」

魏營孫禮:「大都督,末將願往,以選擇排序法取之」

待信令一出,王平孫禮皆開始重整隊伍。

司馬觀王平策略,只見王平來到隊伍起始,依次喚後一人出列,空出其位,隨後將其與前面之人相比,若矮於前面之人,則繼續向前,直到尋出比之更矮之人,則將出列之人置於其後,原來位置之人依次後移。多次重複後,隊伍已逐漸呈自低向高之勢排列

而另一側,魏將孫禮之法,卻有不同。只見其從第一人開始,記錄為最矮之人,隨後從第二人開始,將其身高與最矮之人身高相比,一旦發現比最矮之人還小,則更新最矮之人編號為當前之人,一趟下來直至隊伍末尾,便知曉誰是整個隊伍最矮之人,將其與隊伍第一位置交換,最矮之人便來到隊伍最前面。接著從第二位置重複以上過程,逐步獲取次矮之人,不多時,隊伍亦逐漸呈自低向高之勢排列

兩人幾乎同時完成整個隊伍的排序,然蜀將王平以微小優勢領先完成,此一輪,蜀勝。

第二輪,雙方皆出百人,少傾,列隊完畢。

蜀營魏延請命:「丞相,末將請求出戰,以快速排序法定能取勝」

諸葛曰:「殺雞焉用牛刀,區區百人之隊,氣泡排序法足矣,此一輪還是讓馬岱出戰吧」

魏延面露不悅。

蜀營派馬岱出戰,魏營遣郭淮出戰。

待信令一出,二人皆開始調整隊伍。

馬岱來到隊首,只見其從第一人開始,比較第一人與第二人之高矮,若第一人高於第二人,則交換兩人站位。繼續比較第二人與第三人,一趟結束,最末尾之人便為隊伍中最高之人。接著來到隊伍開頭,故技重施,不斷交換,一直將隊伍中次高之人交換到倒數第二的位置。

司馬觀之,嘆曰:「諸葛亮徒有虛名,竟派馬岱使用氣泡排序法,大量交換費時費力,我軍穩操勝券了」

此刻,魏延大急:「丞相,那郭淮使的什麼方法,像插入法又不像插入法,眼看就要完成了,丞相真該派我出戰」

諸葛不語,一旁王平言道:「上將軍,依末將愚見,此貌似縮小增量排序法,又名希爾排序法,由插入排序法改進而來,早年由西域傳入中原」。

片刻之後,郭淮率先完成隊伍排列,此一輪,魏勝。

第三輪,雙方佇列增至千人。

蜀營魏延再次請求出戰。

諸葛問魏延:「文長(魏延,字文長)啊,你打算以何演算法破之?」

魏延答:「丞相,末將方才已經告知,予以快速排序法破之」

諸葛搖頭,「不可」

魏延不解,「有何不可?」

諸葛復曰:「我觀司馬懿此一輪必遣其子司馬昭出戰,司馬昭此人我素有耳聞,同樣擅使快速排序法,若你二人均以此法上陣,你可有把握勝之?」

魏延搖頭:「倘若如此,末將並無十足把握」

諸葛輕揮羽扇,「此一局不宜使用快速排序法,姜維過來,本相另有良策傳授與你」

魏延憤懣不平:「丞相為何視我為無物,末將不服」。

諸葛笑曰:「文長休急,本相另有重任相托」。

魏延大喜。

另一方魏營,司馬昭曰:「父親,孩兒研習快速排序法多年,此一輪願請出戰」

仲達怒斥:「軍中無父子!」

昭大驚,改口:「是,大都督」

仲達緩捋長鬚,曰:「此一輪,不可用快速排序法

昭不明:「這是為何?」

快速排序法之要害,在於選擇基準參考,並將隊伍劃分為矮於基準之人部分和高於基準之人部分。再縮小範圍,復用此法,直至整個隊伍有序。

昭曰:「父親,,,大都督所言不錯,可為何不能使用此法?」

仲達指著隊伍,言道:「諸將請看,千人之隊,必有大量身高相等之人,若以快速排序法,勢必做大量無用位置交換,徒耗不少功夫。快速排序法名曰快速,切不可紙上談兵,還需審時度勢,靈活變通才是」

司馬昭點頭,深以為然:「還是大都督老謀深算,末將雖研習多年,尤未可及也」

仲達於司馬昭耳畔竊言數語,隨即遣之出戰。

司馬昭來到隊伍前面,將隊伍分作兩半,又將每一半繼續分作兩半,直至無可再分。接著按照大小合併每乙個細分的部分為有序隊伍,又進一步將這些有序隊伍合併成更大的有序隊伍,直至合併所有兵士為整體的有序隊伍

司馬問道:「孔明,你可識得我兒司馬昭所用排序之法?」

諸葛笑答:「別說是我,我蜀中三尺孩童也識得,此乃歸併排序法,是也不是?」

司馬未露聲色,回看姜維,一不留神,姜維所排隊伍竟已近尾聲。

諸葛察之,問道:「仲達可識得姜維所用排序之法?」

司馬細細觀之,只見姜維從隊首至隊尾,依次詢問所有人身高,並記錄整個隊伍之最矮與最高者,最終得最矮者六尺二寸,最高者八尺三寸。隨即從六尺二寸、六尺三寸、六尺四寸,直至八尺二寸、八尺三寸共劃分為二十二組。隨後將所有人依次分入各組,再將各組依序合併。千人之隊,不待半個時辰,竟將完成。

片刻之後,姜維完成佇列排序,此一輪,蜀勝。

司馬仍未露聲色,悄然返回軍中,謂之左右曰:「諸葛亮果然有些本事,我不如也」

三局兩勝,司馬失利,依約後撤五十里,高掛免戰牌,自此堅守不出。

彩蛋

撤軍路上,昭問仲達:「大都督,蜀將姜維所用何法,竟能如此神速?」

不待仲達開口,前方一哨騎回報:「報~,大都督,蜀將魏延趁兩軍對峙,親率兩萬鐵騎攻我大營,我守將不備,大營給,給丟了」

司馬怒目圓睜,摔下馬去。

文中****

《十大經典排序演算法(**演示)》:

諸葛亮 臥龍

諸葛亮 181 234年 字孔明,號臥龍,琅邪陽都 今山東沂南縣 人。他是漢朝司隸校尉諸葛豐的後代。諸葛亮於漢靈帝光和四年 181年 出生於琅邪陽都的乙個官吏之家。諸葛氏是琅邪的望族,先祖諸葛豐曾在西漢元帝時做過司隸校尉 衛戍京師的長官 諸葛亮父親諸葛圭,字君貢,東漢末年做過泰山郡丞。諸葛亮早年喪父...

諸葛亮給子書

諸葛亮給子書 夫君子之行,靜以修身,儉以養德 非澹泊無以明志,非寧靜無以致遠。夫學須靜也,才須學也 非學無以廣才,非志無以成學。怠慢則不能勵精,險躁則不能冶性。年與時馳,意與歲去,遂成枯落,多不接世。悲守窮廬,將復何及!讓我們一起向諸葛亮老師學習十堂課,在變局中安身立命,在逆境中找到力量 第一課 寧...

諸葛亮《誡子書》

諸葛亮 誡子書 夫君子之行,靜以修身,儉以養德 非澹泊無以明志,非寧靜無以致遠。夫學須靜也,才須學也 非學無以廣才,非志無以成學。淫慢則不能勵精,險躁則不能冶性。年與時馳,意與歲去,遂成枯落,多不接世。悲守窮廬,將復何及!真正的智慧型,可以超越時空,歷久彌新。一千多年前諸葛亮寫給兒子的一封信只有短短...