1. <bdo id="8zfej"></bdo>
    <li id="8zfej"><meter id="8zfej"><th id="8zfej"></th></meter></li>

    南京北大青鳥

    全國咨詢電話:15195455103

    三分鐘了解北大青鳥
    當前位置:南京北大青鳥 > 學習園地 > 編程技巧

    C#版冒泡排序優化

    來源:未知? ? ? 作者:IT教育 ? ??

    之前寫了一個C#版冒泡排序的實現。由于之前的版本是用兩層for循環來實現的,這個版本的排序還是有進一步優化的空間的。 之前的排序: int temp = 0; for (int i = arr.Length - 1; i 0; i--) { fo
    之前寫了一個C#版冒泡排序的實現。由于之前的版本是用兩層for循環來實現的,這個版本的排序還是有進一步優化的空間的。
    之前的排序:
    int temp = 0;
    for (int i = arr.Length - 1; i > 0; i--)
    {
        for (int j = 0; j < i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                temp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    能夠看出,由于有兩層for循環的存在,使得整個排序必須要進行(n - 2)!次判斷,即使第一次產生的數組就是已經排好序的。
    對這個版本的冒泡排序進行優化:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace _0301數組的冒泡排序_優化
    {
        class Program
        {
            static void Main(string[] args)
            {
                int len = 0;        //數組大小
                int min = 0;        //數組下界
                int max = 0;        //數組上界
     
                Console.WriteLine("下面將產生一個隨機數組");
     
                //接收數組大小
                do
                {
                    Console.WriteLine("請輸入數組大小,它必須是一個小于等于10的正整數:");
                    len = int.Parse(Console.ReadLine());
                } while ((len <= 0) || (len > 10));
     
                //接收數組下界
                Console.WriteLine("請輸入數組下界,它必須是一個整數:");
                min = int.Parse(Console.ReadLine());
     
                //接收數組上界
                do
                {
                    Console.WriteLine("請輸入數組上界,它必須是一個整數,并且比數組小值大,且能讓數組容納{0}個數:", len);
                    max = int.Parse(Console.ReadLine());
                } while ((max <= min) || ((max - min + 1) < len));
     
                Console.WriteLine();
                Console.WriteLine("數組長度:{0}\n數組下界:{1}\n數組上界:{2}", len, min, max);
                Console.WriteLine("生成數組如下:");
     
                int iSeed = 6;
                Random ra = new Random(iSeed);
                int[] arr = new int[len];
                //打印原數組的值
                for (int i = 0; i < arr.Length; i++)
                {
                    arr[i] = ra.Next(min, max);
     
                    Console.Write(arr[i]);
                    if (i < arr.Length - 1)
                    {
                        Console.Write(",");
                    }
                    else
                    {
                        Console.WriteLine();
                    }
     
                }
     
                //開始進行數組排序
                Console.WriteLine("數組產生完畢,開始排序");
                Console.WriteLine();
     
                #region 原有排序,這種排序必須要比較(n -2)!次
                //int temp = 0;
                //for (int i = arr.Length - 1; i > 0; i--)
                //{
                //    for (int j = 0; j < i; j++)
                //    {
                //        if (arr[j] > arr[j + 1])
                //        {
                //            temp = arr[j + 1];
                //            arr[j + 1] = arr[j];
                //            arr[j] = temp;
                //        }
                //    }
                //}
                #endregion
     
                //這種排序多比較(n - 2)!次,但如果當前已是優排序結果則直接停止比較
                int temp = 0;
                bool swapped = true;
                do
                {
                    swapped = false;
     
                    for (int i = 0; i < arr.Length - 1; i++)
                    {
                        if (arr[i] > arr[i + 1])
                        {
                            temp = arr[i];
                            arr[i] = arr[i + 1];
                            arr[i + 1] = temp;
                            swapped = true;
                        }
                    }
     
                } while (swapped);
     
                //打印排序后的結果
                Console.WriteLine("排序后結果:");
     
                for (int i = 0; i < arr.Length; i++)
                {
                    Console.Write(arr[i]);
                    if (i < arr.Length - 1)
                    {
                        Console.Write(",");
                    }
                    else
                    {
                        Console.WriteLine();
                    }
     
                }
                Console.WriteLine("程序結束");
                Console.ReadKey();
            }
        }
    }
    這個版本的排序將外層循環改成了do...while()實現,并設置一個標識變量swapped,如果本次內部循環未進行一次數據置換則說明數組序列已實現優,立刻結束外層循環。這種排序多比較(n - 2)!次,但如果當前已是優排序結果則直接停止比較。

    其實外層循環是for循環也可以實現這種效果,但相對來說do...while()寫起來更優雅一些。

    分享到:
    近期文章

    搶試聽名額

    名額僅剩66名

    教育改變生活

    WE CHANGE LIVES

    主站蜘蛛池模板: 伊人久久婷婷五月综合97色 | 亚洲av永久中文无码精品综合| 久久综合综合久久狠狠狠97色88| 国产AV综合影院| 色综合久久精品中文字幕首页| 色综合伊人色综合网站| 久久综合精品国产二区无码| 亚洲av无码兔费综合| 久久综合综合久久| 国产亚洲综合一区二区三区| 久久婷婷五月综合尤物色国产| 国产成人综合久久精品免费| 婷婷成人丁香五月综合激情| 伊人色综合久久天天人守人婷| 久久香综合精品久久伊人| 丁香婷婷色五月激情综合深爱 | 日韩亚洲国产综合高清| 亚洲精品二区国产综合野狼| 一本色道久久鬼综合88| 天天做.天天爱.天天综合网| 国产91色综合久久免费| 亚洲欧洲尹人香蕉综合| 久久久久综合网久久| 久久综合日韩亚洲精品色| 亚洲AV成人潮喷综合网| 亚洲狠狠婷婷综合久久蜜芽| 狠狠色噜狠狠狠狠色综合久| 色欲天天婬色婬香视频综合网| 亚洲国产综合91精品麻豆| 伊人久久大香线蕉综合7| 国产成人亚洲综合无码| 国产一区二区三区亚洲综合| 亚洲精品第一国产综合亚AV | 色久悠悠婷婷综合在线亚洲| 国产综合无码一区二区色蜜蜜| 色综合久久一本首久久| 精品福利一区二区三区精品国产第一国产综合精品 | 日韩无码系列综合区| 色老头综合免费视频| 色偷偷91久久综合噜噜噜噜| 99久久综合狠狠综合久久止|