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

    南京中博教育

    全國咨詢電話:17368476151

    三分鐘了解中博教育
    當前位置:南京中博教育 > 學習園地 > 編程技巧

    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

    主站蜘蛛池模板: 精品久久综合1区2区3区激情 | 伊人色综合久久天天人守人婷 | 婷婷综合久久中文字幕蜜桃三| 五月婷婷激情综合| 亚洲国产欧美国产综合一区| HEYZO无码综合国产精品| 人人妻人人狠人人爽天天综合网| 色综合久久88色综合天天| 狠狠色综合久色aⅴ网站| 色悠久久久久久久综合网| 亚洲情综合五月天| 国产香蕉尹人综合在线观看| 久久综合亚洲色HEZYO社区| 亚洲国产精品综合久久一线| 涩涩色中文综合亚洲| 国产成人综合美国十次| 一本色道久久综合亚洲精品高清| 六月婷婷国产精品综合| 一本色道久久88加勒比—综合 | 婷婷久久综合九色综合绿巨人 | 色偷偷尼玛图亚洲综合| 国产婷婷色综合AV蜜臀AV| 色天使久久综合给合久久97色| 亚洲欧洲日韩综合| 亚洲国产成人久久综合碰碰动漫3d| 国产成人精品久久综合| 香蕉99久久国产综合精品宅男自| 亚洲av综合av一区二区三区| 伊人色综合久久天天| 国产成人亚洲综合一区| 麻豆久久婷婷五月综合国产| 五月婷婷综合在线| 人人狠狠综合久久亚洲高清| 亚洲国产精品成人综合色在线| 色综合久久98天天综合| 国产成人久久综合二区| 综合久久给合久久狠狠狠97色| 国产成人综合久久久久久| 久久婷婷综合中文字幕| 久久婷婷午色综合夜啪 | 久久婷婷五月综合色国产香蕉|