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色综合成人网| 天天久久影视色香综合网| 色综久久天天综合绕视看 | 伊人色综合久久大香| 中文字幕久久综合| 91精品国产色综合久久不| 亚洲国产欧美国产综合一区 | 久久婷婷午色综合夜啪| 五月综合激情婷婷六月色窝| 国产成人综合美国十次| 国产综合成色在线视频| 亚洲综合在线另类色区奇米| 狠狠色丁香婷婷综合潮喷| 亚洲av综合avav中文| 亚洲 自拍 另类小说综合图区| 天天色天天操综合网| 久久综合狠狠综合久久综合88| 伊人婷婷色香五月综合缴激情 | 18和谐综合色区| 国产亚洲精品精品国产亚洲综合| 亚洲av综合av一区二区三区| 色综合天天综合网站中国| 99久久综合国产精品免费| 精品国产第一国产综合精品| 狠狠色噜噜狠狠狠狠狠色综合久久| 婷婷五月六月激情综合色中文字幕 | 精品久久久久久亚洲综合网| 日韩综合在线观看| 开心婷婷五月激情综合社区| 丁香婷婷激情综合俺也去| 国产综合在线观看视频| 亚洲欧洲国产成人综合在线观看| 色婷婷综合缴情综免费观看| 久久本道综合久久伊人| 久久综合九色综合欧洲| 激情综合亚洲色婷婷五月APP| 色综合91久久精品中文字幕| 狠狠激情五月综合婷婷俺| 色婷婷综合久久久久中文一区二区|