補充教學-氣泡排序法

更新 發佈閱讀 9 分鐘

氣泡排序法(Bubble Sort)執行範例

raw-image


BubbleSample.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="BubbleSample.aspx.cs" Inherits="BubbleSample" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
原本亂數產生的陣列:<br />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<br /><br />
排序後的陣列:<br />
<asp:Label ID="Label3" runat="server" Text=""></asp:Label>
<br /><br />
由小到大排序每一次的過程<br />
<asp:Label ID="Label2" runat="server" Text=""></asp:Label>

<br /><br />
<!--排序執行時間-->
<asp:Label ID="Label4" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>

BubbleSample.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
int[] ary = new int[5]; //宣告陣列大小為10

Random rnd = new Random(); //產生亂數初始值

for (int i = 0; i < ary.Length; i++)
{
ary[i] = rnd.Next(1, 10); //亂數產生,亂數產生的範圍是1~9
}

//顯示原本陣列內容
showArray(Label1, ary);
//排序
BubbleSort(Label2, ary);
//顯示陣列由小到大排序後結果
showArray(Label3, ary);
}

void BubbleSort(Label lab, int[] ary)
{
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
stopWatch.Start(); //計算程式時間開始

int counter = 0;

for (int i = 0; i < ary.Length; i++)
{
//因為下面比較會使用到j+1,所以j最大只能到陣列的倒數第二個,不然發生錯誤(陣列會超出範圍)
for (int j = 0; j < ary.Length-1; j++)
{
lab.Text += $"ary[{j}] = {ary[j]},ary[{j+1}] = {ary[j+1]},";

//由小到大;如果要改為由大到小,把 ary[j < ary[j+1] 改為 ary[j] > ary[j+1]
if (ary[j] > ary[j+1])
{
lab.Text += "swap,";
swap(ary, j, j+1);
}
else
{
//顯示空格,排版用,畫面比較整齊
lab.Text += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,";
}
counter++;
lab.Text += $"第{counter.ToString("00")}次排序後結果: ";
showArray(lab, ary, true, j);
}
lab.Text += $"此輪(for j 迴圈)結束會找到ary[{ary.Length-1-i}]是陣列 0 - {ary.Length - 1 - i}中最大的數值 {ary[ary.Length - 1 - i]}<br>";
}

stopWatch.Stop(); //計算程式時間結束

Label4.Text += $"排序執行次數: {counter} <br>";

Label4.Text += $"排序執行時間(秒):{(stopWatch.Elapsed.TotalMilliseconds / 1000).ToString("")} <br>";
}

//兩個值互相交換
void swap(int[] ary, int value1, int value2)
{
int tmp = ary[value2];
ary[value2] = ary[value1];
ary[value1] = tmp;
}

//顯示陣列內容
//IsAdd:是一個選擇(optional)參數,可用可不用,預設值為false
//markIndex:會將陣列中的第markIndex與markIndex+1元素變成紅色,預設值為-1 (陣列起始值為0)
void showArray(Label lab , int[] ary, bool IsAdd = false, int markIndex = -1)
{
string str = string.Empty;

for (int i = 0; i < ary.Length; i++)
{
if(markIndex > -1 && (i == markIndex || i == (markIndex+1)))
{
str += $"<font color=red>{ary[i]}</font>,";
}
else
{
str += ary[i] + ",";
}
}

if(IsAdd == false)
{
lab.Text = str;
}
else
{
lab.Text += str + "<br>";
}
}

執行結果:

raw-image


還有其他的排序方式,例如

  • Selection Sort
  • Insertion Sort
  • Merge Sort
  • Quick Sort
  • Heap Sort

還有很多種排序方式,可以上網查詢關鍵字或是查詢"資料結構"(Algorithm)

範例網站:https://medium.com/engineering-hub/https-medium-com-engineering-hub-sorting-algorithms-in-csharp-and-java-4615f6f87696


留言
avatar-img
留言分享你的想法!
avatar-img
Phyxsius
0會員
19內容數
FIRE
你可能也想看
Thumbnail
Sunkronizo 的 Playful Heart 是一款帶著明亮果香與柔和木質調的甜感香水,特別適合星期四使用。前調活潑、尾韻沉靜,陪你從忙碌過渡到週末的輕鬆心情。適合喜歡果香、花果香調的女性,也很適合作為溫暖又有個性的送禮選擇。可於官網、Pinkoi 選購,11 月底起於臺中國家歌劇院寄售。
Thumbnail
Sunkronizo 的 Playful Heart 是一款帶著明亮果香與柔和木質調的甜感香水,特別適合星期四使用。前調活潑、尾韻沉靜,陪你從忙碌過渡到週末的輕鬆心情。適合喜歡果香、花果香調的女性,也很適合作為溫暖又有個性的送禮選擇。可於官網、Pinkoi 選購,11 月底起於臺中國家歌劇院寄售。
Thumbnail
根據美國電影協會(MPA)主辦的「串流服務如何推動臺灣創意經濟」論壇內容,深入探討串流平臺對臺灣影視產業的影響、數據分析、政府政策建議、內容國際化策略,以及臺灣與「韓流」的差距。文章提出 awwrated 在串流生態系中的潛在角色,強調數據、策略與自信是臺灣影視產業發展的關鍵。
Thumbnail
根據美國電影協會(MPA)主辦的「串流服務如何推動臺灣創意經濟」論壇內容,深入探討串流平臺對臺灣影視產業的影響、數據分析、政府政策建議、內容國際化策略,以及臺灣與「韓流」的差距。文章提出 awwrated 在串流生態系中的潛在角色,強調數據、策略與自信是臺灣影視產業發展的關鍵。
Thumbnail
中學數學基礎練習—分組分解法
Thumbnail
中學數學基礎練習—分組分解法
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—配方法
Thumbnail
高中數學主題練習—配方法
Thumbnail
高中數學主題練習—配方法
Thumbnail
高中數學主題練習—配方法
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—指數律基本練習
Thumbnail
高中數學主題練習—指數律基本練習
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News