C#刚操,歸并排序算法(Merge Sort Algorithm)的源代碼及數(shù)據(jù)可視化

歸并排序

歸并算法采用非常經(jīng)典的分治策略蒿赢,每次把序列分成n/2的長(zhǎng)度,將問題分解成小問題,由復(fù)雜變簡(jiǎn)單鸭轮。

因?yàn)槭褂昧?a target="_blank">遞歸算法,不能用于大數(shù)據(jù)的排序橄霉。


核心代碼:

using System;

using System.Text;

using System.Collections.Generic;

using System.Windows.Forms;


namespace WindowsFormsApp6

{

??? public partial classForm1 : Form

??? {

??????? Random rnd = newRandom((int)DateTime.Now.Ticks);

??????? Listslides = new List();


??????? public Form1()

??????? {

???????????InitializeComponent();

???????????BrowserReleaseHelper.SetWebBrowserFeatures(11);

??????? }


????? ??private void Form1_Load(object sender,EventArgs e)

??????? {

??????????? this.Text ="C#窃爷,四種常見排序算法的可視化編程——北京聯(lián)高軟件開發(fā)有限公司";

??????????? button1.Text ="選擇排序"; button1.Cursor =Cursors.Hand;

??????????? button2.Text ="冒泡排序"; button2.Cursor =Cursors.Hand;

??????????? button3.Text ="插入排序"; button3.Cursor =Cursors.Hand;

??????????? button4.Text ="快速(遞歸)"; button4.Cursor = Cursors.Hand;

??????????? button5.Text ="快速(非遞歸)"; button5.Cursor = Cursors.Hand;

??????????? button6.Text ="歸并排序"; button6.Cursor =Cursors.Hand;

??????????? panel1.Dock =DockStyle.Top;

??????????? panel2.Dock =DockStyle.Fill;

???????????webBrowser1.Navigate("http://www.315soft.com");

??????? }


??????? private int[]RandArray()

??????? {

??????????? int n = 20;

??????????? int[] dataArray= new int[n];

??????????? for (int i =0; i < n; i++)

??????????? {

???????????????dataArray[i] = rnd.Next(20, 100);

??????????? }

??????????? returndataArray;

??????? }


??????? private voidbutton6_Click(object sender, EventArgs e)

??????? {

??????????? int[]arraySource = RandArray();

??????????? int[]arrayTemplate = new int[arraySource.Length];

??????????? MergeSort(0,arraySource.Length - 1, ref arraySource, ref arrayTemplate);


??????????? loop = 0;

???????????timer1.Interval = 100;

?? ?????????timer1.Enabled = true;

??????? }


??????? ///

??????? ///歸并排序算法

??????? ///

??????? ///

??????? ///

??????? ///

??????? ///

??????? private voidMergeSort(int left, int right, ref int[] arraySource, ref int[] arrayTemplate)

??????? {

??????????? if (left >=right)

??????????? {

??????????????? return;

??????????? }

??????????? int mid =(left + right) >> 1;

???????????MergeSort(left, mid, ref arraySource, ref arrayTemplate);

??????????? MergeSort(mid+ 1, right, ref arraySource, ref arrayTemplate);

??????????? int head_left= left;

??????????? int head_right= mid + 1;

?????????? ?int tmp_index = left;

??????????? while(head_left <= mid && head_right <= right)

??????????? {

??????????????? if(arraySource[head_left] < arraySource[head_right])

??????????????? {

???????????????????arrayTemplate[tmp_index++] = arraySource[head_left++];

??????????????? }

??????????????? else

??????????????? {

???????????????????arrayTemplate[tmp_index++] = arraySource[head_right++];

??????????????? }

??????????? }

??????????? while(head_left <= mid)

??????????? {

???????????????arrayTemplate[tmp_index++] = arraySource[head_left++];

??????????? }

??????????? while(head_right <= right)

??????????? {

???????????????arrayTemplate[tmp_index++] = arraySource[head_right++];

??????????? }

??????????? for (int i =left; i <= right; i++)

??????????? {

???????????????arraySource[i] = arrayTemplate[i];

??????????? }


???????????slides.Add(Slide(button6.Text, arraySource, left, right));

??????? }


??????? private stringSlide(string title, int[] dataArray, int a, int b)

??????? {

??????????? StringBuildersb = new StringBuilder();

???????????sb.AppendLine("");

???????????sb.AppendLine("");

???????????sb.AppendLine("");

???????????sb.AppendLine("");

???????????sb.AppendLine("td {vertical-align:bottom;text-align:center;font-size:12px; } ");

???????????sb.AppendLine(".bar { width:" + (int)((webBrowser1.Width -dataArray.Length * 11) / dataArray.Length) +"px;font-size:12px;border:solid 1px#FF6701;background-color:#F08080;text-align:center;border-radius:3px; }");

???????????sb.AppendLine("");

???????????sb.AppendLine("");

???????????sb.AppendLine("");

???????????sb.AppendLine("");

???????????sb.AppendLine("");

???????????sb.AppendLine("方法:" +title + "");

???????????sb.AppendLine("數(shù)據(jù):" +dataArray.Length + "");

??????????? sb.AppendLine("步驟:[0]");

???????????sb.AppendLine("");

???????????sb.AppendLine("");

???????????sb.AppendLine("
");

???????????sb.AppendLine("");

???????????sb.AppendLine("");

??????????? for (int i =0; i < dataArray.Length; i++)

??????????? {

??????????????? if (i == a|| i == b)

??????????????? {

???????????????????sb.AppendLine("" + dataArray[i] + "");

??????????????? }

??????????????? else

??????????????? {

???????????????????sb.AppendLine("" + dataArray[i] + "");

? ??????????????}

??????????? }


???????????sb.AppendLine("");

???????????sb.AppendLine("");

???????????sb.AppendLine("");

???????????sb.AppendLine("");

??????????? returnsb.ToString();

??????? }



??????? int loop = 0;


??????? private void timer1_Tick(object sender,EventArgs e)

??????? {

??????????? if (loop

??????????? {

??????????????? if (loop< slides.Count)

??????????????? {

???????????????????webBrowser1.DocumentText = slides[loop].Replace("[0]", loop +" / " + slides.Count);

???????????????????loop++;

???????????????????return;

??????????????? }

??????????????? loop++;

??????????????? return;

??????????? }

??????????? loop = 0;

??????? }

??? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市姓蜂,隨后出現(xiàn)的幾起案子吞鸭,更是在濱河造成了極大的恐慌,老刑警劉巖覆糟,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刻剥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡滩字,警方通過查閱死者的電腦和手機(jī)造虏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來麦箍,“玉大人漓藕,你說我怎么就攤上這事⌒眩” “怎么了享钞?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)诀蓉。 經(jīng)常有香客問我栗竖,道長(zhǎng),這世上最難降的妖魔是什么渠啤? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任狐肢,我火速辦了婚禮,結(jié)果婚禮上沥曹,老公的妹妹穿的比我還像新娘份名。我一直安慰自己碟联,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布僵腺。 她就那樣靜靜地躺著鲤孵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辰如。 梳的紋絲不亂的頭發(fā)上普监,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音丧没,去河邊找鬼鹰椒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛呕童,可吹牛的內(nèi)容都是我干的漆际。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夺饲,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼奸汇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起往声,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤擂找,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后浩销,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贯涎,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年慢洋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了塘雳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡普筹,死狀恐怖败明,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情太防,我是刑警寧澤妻顶,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蜒车,受9級(jí)特大地震影響讳嘱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜醇王,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一呢燥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寓娩,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至焊夸,卻和暖如春仁连,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阱穗。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工饭冬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人揪阶。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓昌抠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鲁僚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炊苫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容