asp.net c#冒泡排序演算法實現代碼

來源:互聯網
上載者:User

1、用第三個變數值交換

int a = 1;
int b = 2;
int c = a;
a = b;
b = c;
2、用加減法交換

a = a + b;
b = a - b;
a = a - b;

a = a - b;
b = a + b;
a = b - a;3、用異或(XOR)法交換

 a = a ^ b;
 b = a ^ b;
 a = a ^ b;詳細可看codeproject上一篇文章 <<神奇的異或 The Magical Exclusive OR (XOR)>>下面我們要在冒泡排序演算法中測試一下這三種交換方法的效率

 代碼如下 複製代碼

  public enum EChangeType
    {
        /// <summary>
        /// 用第三方變數temp進行前後值交換
        /// </summary>
        ThridVar,
        /// <summary>
        /// 用a=a+b;b=a-b;a=a-b 計算方法進行前後值交換
        /// </summary>
        Js,
        /// <summary>
        /// 用a=a^b;b=a^b;a=a^b 計算方法進行前後值交換
        /// </summary>
        XOR
    }/// <summary>
    /// 冒泡排序演算法:
    /// a、首先將所有待排序的數字放入工作列表中
    /// b、從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換
    /// c、重複2號步驟,直至再也不能交換
    /// </summary>
    public class BubbleSort
    {
        public void Sort(int[] arrInt, EChangeType type)
        {
            System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch();
            st.Start();
            int count = 0;
            int temp;
            bool hasExchangeAction; //記錄此次大迴圈中相鄰的兩個數是否發生過互換(如果沒有互換,則數組已經是有序的)

            for (int i = 0; i < arrInt.Length - 1; i++)
            {
                count++;
                hasExchangeAction = false;  //每次大迴圈都假設數組有序

                for (int j = i + 1; j < arrInt.Length; j++)
                {
                    count++;
                    if (arrInt[i] > arrInt[j])
                    {
                        switch (type)
                        {
                            case EChangeType.ThridVar:
                                temp = arrInt[i];
                                arrInt[i] = arrInt[i + 1];
                                arrInt[i + 1] = temp;
                                break;
                            case EChangeType.Js:
                                arrInt[i] = arrInt[i] + arrInt[j];
                                arrInt[j] = arrInt[i] - arrInt[j];
                                arrInt[i] = arrInt[i] - arrInt[j];
                                break;
                            case EChangeType.XOR:
                                arrInt[i] = arrInt[i] ^ arrInt[j];
                                arrInt[j] = arrInt[i] ^ arrInt[j];
                                arrInt[i] = arrInt[i] ^ arrInt[j];
                                break;
                            default:
                                break;
                        }
                        hasExchangeAction = true;   //發生過互換
                    }
                }

                if (!hasExchangeAction) //如果沒有發生過互換,則數組已經是有序的了,跳出迴圈
                {
                    break;
                }
            }
            st.Stop();
            switch (type)
            {
                case EChangeType.ThridVar:
                    Console.WriteLine("用第三方變數temp進行前後值交換:");
                    break;
                case EChangeType.Js:
                    Console.WriteLine("用a = a + b; b = a - b; a = a - b;(或a = a - b; b = a + b; a = b - a;) n計算方法進行前後值交換:");
                    break;
                case EChangeType.XOR:
                    Console.WriteLine("用a = a ^ b; b = a ^ b; a = a ^ b; 計算方法進行前後值交換:");
                    break;
                default:
                    break;
            }
            Console.WriteLine("迴圈總數:{0} 排序耗時:{1}{2}", count, st.ElapsedMilliseconds,Environment.NewLine);
        }
    }

static void Main(string[] args)
        {
            List<int> list = new List<int>();
            for (int i = 100 * 100; i >= 0; i--)
            {
                list.Add(i);
            }
            Console.WriteLine("對100 * 100個數字進行冒泡排序{0}", Environment.NewLine);
       
            new BubbleSort().Sort(list.ToArray(), EChangeType.ThridVar);
        
            new BubbleSort().Sort(list.ToArray(), EChangeType.Js);         
      
            new BubbleSort().Sort(list.ToArray(), EChangeType.XOR);
       
            Console.ReadLine();
        }結果

 

人生無處不PK

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.