C#冒泡排序

來源:互聯網
上載者:User

標籤:排序演算法   c#   

冒泡排序法:

1:簡介:

冒泡排序(Bubble Sort),是一種電腦科學領域的較簡單的排序演算法。

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

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

2:基本原理:

冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小的數放在前面,大的數??放在後面。即在第一趟:首先比較第一個和第二個數,將小的數放在前面,大的數放在後面。然後比較第二個數和第三個數,將小的數放在前面,將大的數放在後面,如此繼續,直到比較最後兩個數,將小的數放在前面,大的數放在後面。至此第一趟結束,將最大的數放在了最後。在第二趟:仍從第一對數開始比較(因為可能第二個數和第三個數的交換,使得第一個數不再小於第二個數),將小的數放在前面,將大的數放在後面,一直比較到倒數第二個數(倒數第一的位置已經是最大的了),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數了)。如此下去,重複以上過程,直至最終完成排序。

3:基本演算法:

在這裡需要提前做一個聲明,我們在使用數組儲存資料的時候,不從下標0開始,這樣呢,可以方便我們一一對應著進行比較,第一個資料的下標就是1。

將待排序的資料存放到一個數組a[1]-a[n]中,我們假設需要將資料按照從小到大的順序排列。

例如,現在我們需要對資料30,10,20,60,25,40進行排序。

第一趟:

從第一個元素開始到第五個元素依次與其後面相鄰的資料進行比較。

1:將第一個資料和第二個資料進行比較,交換後得到:

10,30,20,60,25,40

2:將第二個資料和第三個資料進行比較,交換後得到:

10,20,30,60,25,40

3:將第三個資料和第四個資料進行比較,交換後得到:

10,20,30,60,25,40

4:將第四個資料和第五個資料進行比較,交換後得到:

10,20,30,25,60,40

5:將第五個資料和第六個資料進行比較,交換後得到:

10,20,30,25,40,60

此時,第一趟比較交換結束,最大的數60已經在6號位置了。

第二趟及第N趟就照著第一趟類推,但需要注意:第N次排序後數列倒數第N個數已經是第N大了,所以,每次排序的次數都將減少一次,直到排序次數只剩一次為止,詳細的請看代碼。

4:代碼:

核心代碼:

public int[] Pop(int[] listI) {     //數組為null拋出異常     if (listI == null) throw new ArgumentNullException("listI");     //儲存臨時的需要冒泡的值     int temp = 0;     //從數組的第一個值遍曆到倒數第二個值     for (int i = 0; i < listI.Length - 1; i++)     {         //從比i大1的值開始遍曆到結束         //這裡比較的總是比i大的值,因為之前的值已經冒泡完成         for (int j = i + 1; j < listI.Length; j++)         {             //如果前一個值大於後一個值,他們交換位置             if (listI[i] > listI[j])             {                 //交換位置                 temp = listI[i];                 listI[i] = listI[j];                 listI[j] = temp;             }         }     }     return listI; }

完整代碼:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 冒泡排序實驗{    class Program    {        static public int[] Pop_(int[] listI)        {            //數組為null拋出異常            if (listI == null) throw new ArgumentNullException("listI");            //儲存臨時的需要冒泡的值            int temp = 0;            //從數組的第一個值遍曆到倒數第二個值            for (int i = 0; i < listI.Length - 1; i++)            {                //從比i大1的值開始遍曆到結束                //這裡比較的總是比i大的值,因為之前的值已經冒泡完成                for (int j = i + 1; j < listI.Length; j++)                {                    //如果前一個值大於後一個值,他們交換位置                    if (listI[i] > listI[j])                    {                        //交換位置                        temp = listI[i];                        listI[i] = listI[j];                        listI[j] = temp;                    }                }            }            return listI;        }        static void Main(string[] args)        {            int[] a = {3,5,23,6,3,77,4,8,5,8,3 };            foreach (int i in Pop_(a))                 Console.Write(i.ToString() + ",");            Console.ReadLine();        }    }}

C#冒泡排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.