C#冒泡排序算法


  冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序算法

  它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。

  這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端,故名。

  冒泡排序算法的運作如下:

  1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

  2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。

  3.針對所有的元素重復以上的步驟,除了最后一個。

  4.持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

  下面以一組數組為例:5,4,3,2,1

排列如下:

  第一次:

      4,5,3,2,1,

                  4,3,5,2,1

                  4,3,2,5,1

                  4,3,2,1,5     交換4次

  第二次:

      3,4,2,1,5

                  3,2,4,1,5

                  3,2,1,4,5          交換3次

  第三次:

      2,3,1,4,5

                  2,1,3,4,5          交換2次

  第四次:

      1,2,3,4,5         交換1次

  由此可見:總計排序4(length-1)次,每次排序交換(length-次數-1)。冒泡排序是C#語言雙層循環交換變量的一個事例,通過外層循環控制循環次數,即保證每個元素都進行一次相鄰元素的交換,內層循環從第一個元素開始控制相鄰元素的比較與交換,最終達到整體的比較。

  下面通過C#代碼通過接受用戶輸入的數字進行排序:

 1 static void Main(string[] args)
 2         {
 3             //接收用戶輸入
 4             Console.WriteLine("請輸入6個正整數:");
 5             int[] myintArray = new int[6];
 6             for (int i = 0; i < myintArray.Length; i++)
 7             {
 8                 myintArray[i] = int.Parse(Console.ReadLine());//循環輸入6個正整數,enter切換
 9             }
10 
11             //正序排列:
12             for (int i = 0; i < myintArray.Length - 1; i++)//外層循環控制循環次數
13             {
14                 for (int j = 0; j < myintArray.Length - i - 1; j++)//內層循環用於交換相鄰要素。
15                 {
16                     int temp;
17                     if (myintArray[j] > myintArray[j + 1])
18                     {
19                         temp = myintArray[j + 1];
20                         myintArray[j + 1] = myintArray[j];
21                         myintArray[j] = temp;
22                     }
23                 }
24             }
25             Console.WriteLine("正序序排列為:");
26             foreach (int outint in myintArray)
27             {
28                 Console.Write(+outint + "\t");
29             }
30             Console.WriteLine();
31             //倒序排列為:
32             for (int i = 0; i < myintArray.Length - 1; i++)
33             {
34                 for (int j = 0; j < myintArray.Length-i - 1; j++)
35                 {
36                     int temp;
37                     if (myintArray[j] < myintArray[j + 1])
38                     {
39                         temp = myintArray[j];
40                         myintArray[j] = myintArray[j + 1];
41                         myintArray[j + 1] = temp;
42                     }
43                 }
44             }
45             Console.WriteLine("倒序排列為:");
46             foreach (int outint in myintArray)
47             {
48                 Console.Write(outint + "\t");
49             }
50 
51             Console.ReadKey();
52         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM