最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實現(xiàn)線性查找算法

 更新時間:2022年08月13日 14:59:28   作者:Darren Ji  
這篇文章介紹了C#實現(xiàn)線性查找的算法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

線性查找,肯定是以線性的方式,在集合或數(shù)組中查找某個元素。

通過代碼來理解線性查找

什么叫"線性"?還是在代碼中體會吧。

首先需要一個集合或數(shù)組,如何得到呢?就生成一個固定長度的隨機(jī)數(shù)組吧。然后輸入一個查找key,如果找到就返回元素的索引,沒找到就返回-1,就這么簡單。

    class Program
    {
        private static int[] arr;
        private static Random r = new Random();
        static void Main(string[] args)
        {
            SeedData(10);
            ShowArray();
            Console.WriteLine("\n");
            Console.WriteLine("請輸入要查找的整型數(shù)");
            var temp = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("您要查找的{0}所在的位置是{1}", temp, LinearSearch(temp));
            Console.ReadKey();
        }
        //線性查找
        private static int LinearSearch(int key)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] == key) return i; //找到就返回索引
            }
            return -1;//如果沒找到就返回-1
        }
        //數(shù)組的種子數(shù)據(jù)
        private static void SeedData(int size)
        {
            arr = new int[size];
            for (int i = 0; i < size; i++)
            {
                arr[i] = r.Next(1, 100);
            }
        }
        //打印數(shù)組的所有元素
        private static void ShowArray()
        {
            foreach (var item in arr)
            {
                Console.Write(item + " ");
            }
        }
    }

以上,我們自己可以定義什么叫"線性查找"了。就是說,當(dāng)我們輸入一個查找的key,是按順序依次查找集合中的每個元素(實際是通過循環(huán)遍歷),如果找不到就返回一個值,比如-1,如果找到就返回該元素的索引位置。

時間復(fù)雜度

線性查找只是查找的一種最簡單的算法,還有其它相對復(fù)雜的算法。如何來衡量各種算法的效率呢,答案是用"時間復(fù)雜度"來衡量的。任何的概念來源于實踐,并不是憑空產(chǎn)生的,"時間復(fù)雜度"也一樣。

O(1)

假設(shè)一個數(shù)組中有10個元素,需要比較第一個元素是否等于第二個元素,算法只需要運(yùn)行一次就可以得出結(jié)果。如果數(shù)組中有100個元素呢?算法還是運(yùn)行一次就得到結(jié)果。于是,人們就想:算法的運(yùn)行和數(shù)組大小沒有關(guān)系,就把這種算法叫做"常量運(yùn)行時間"吧。但還不夠直觀,用什么圖形表示呢?人們想出就用O(1)來表示吧。

O(1)雖然很直觀,但很容易產(chǎn)生歧義。有些人認(rèn)為:只有算法運(yùn)行一次,并且運(yùn)行的次數(shù)不隨數(shù)組大小改變,就可以用O(1)表示了。這是很明顯的"望文生義"。O(1)更準(zhǔn)確的解釋是:算法的運(yùn)行次數(shù)是一個常量,不會隨著數(shù)組大小而改變。

O(n)

生活的精彩來自多樣性。假設(shè)一個數(shù)組中還是10個元素,需要比較第一個元素是否等于數(shù)組中任何其它元素,算法需要運(yùn)行9次。如果數(shù)組中有100個元素呢,算法需要運(yùn)行99次,也就是n-1次,算法運(yùn)行的次數(shù)隨著n的不同而發(fā)生改變。人們把這種算法寫成O(n),1可以忽略不計,讀成"n階"。

O(n²)

假設(shè)還有一種算法,需要比較數(shù)組中的任何元素于其它元素是否相等。第一個元素,需要和后面n-1個元素比較,第二個元素需要和除了第一個元素之外的其后面n-2個元素比較......也就是:(n-1) + (n-2) + ... + 2 + 1,這個公式用筆在紙上簡單推算一下,還可以提煉為n²/2-n/2,隨著n的增大,常量因子可以忽略,寫成O(n²),稱為"平方運(yùn)行時間",讀成"n²階"。

當(dāng)n是幾萬,O(n²)算法在今天每秒運(yùn)行幾十億次的個人計算機(jī)上,不會有明顯的性能影響。但如果n變成幾百萬,就要求幾萬億次計算,這樣可能要幾個小時來執(zhí)行。更有甚者,如果n變成幾十億,計算需要幾十年來完成。所以,每種算法都有它的適用范圍。

現(xiàn)在,可以稍微完整地定義"時間復(fù)雜度"了,它是一個函數(shù),定量描述了算法的運(yùn)行時間。時間復(fù)雜度是在最壞情況下的時間復(fù)雜度。

常見的時間復(fù)雜度有:

  • O(1), 常數(shù)階,比如Hash表的查找
  • O(log2n),對數(shù)階,比如二分查找
  • O(n),線性階
  • O(nlog2n),線性對數(shù)階,比如快速排序的平均復(fù)雜度
  • O(n^2),平方階,比如冒泡排序
  • O(n^3),立方階,比如求最短路徑的Floyd算法
  • O(n^k),k次方階
  • O(2^n),指數(shù)階,比如漢諾塔

什么是算法

是解決特定問題求解步驟的描述。在計算機(jī)中表現(xiàn)為指令的有限序列,并且每條指令表示一個或多個操作。

sum = 1     +     2     +     3 + ... + 100
sum = 100   +     99  +   98+ ... + 1
2*sum = 101*100 = 10100
sum = 5050

以上就是針對1到100求和的算法。對,是在18世紀(jì),一個德國的小村莊,一個叫高斯的小孩想出來的,就這么神奇!

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • C#文件操作類分享

    C#文件操作類分享

    這篇文章主要為大家分享了C#文件操作類的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Unity游戲開發(fā)實現(xiàn)背包系統(tǒng)的示例詳解

    Unity游戲開發(fā)實現(xiàn)背包系統(tǒng)的示例詳解

    這篇文章主要為大家介紹了Unity游戲開發(fā)實現(xiàn)背包系統(tǒng)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 詳解C#中的屬性和屬性的使用

    詳解C#中的屬性和屬性的使用

    這篇文章主要介紹了C#中的屬性和屬性的使用,包括get訪問器和set訪問器等內(nèi)容,需要的朋友可以參考下
    2016-01-01
  • c#如何實現(xiàn)接口事件

    c#如何實現(xiàn)接口事件

    這篇文章主要介紹了c#如何實現(xiàn)接口事件,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10
  • OpenXml讀取word內(nèi)容的實例

    OpenXml讀取word內(nèi)容的實例

    下面小編就為大家分享一篇OpenXml讀取word內(nèi)容的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • C#實現(xiàn)將HTML轉(zhuǎn)換成純文本的方法

    C#實現(xiàn)將HTML轉(zhuǎn)換成純文本的方法

    這篇文章主要介紹了C#實現(xiàn)將HTML轉(zhuǎn)換成純文本的方法,基于自定義類實現(xiàn)文本轉(zhuǎn)換功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • UnityShader3實現(xiàn)波浪效果

    UnityShader3實現(xiàn)波浪效果

    這篇文章主要為大家詳細(xì)介紹了UnityShader3實現(xiàn)波浪效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Unity打包代碼到DLL的實現(xiàn)

    Unity打包代碼到DLL的實現(xiàn)

    本文主要介紹了Unity打包代碼到DLL的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • WinForm中DefWndProc、WndProc與IMessageFilter的區(qū)別

    WinForm中DefWndProc、WndProc與IMessageFilter的區(qū)別

    這篇文章主要介紹了WinForm中DefWndProc、WndProc與IMessageFilter的區(qū)別,較為詳細(xì)的分析了WinForm的消息處理機(jī)制,需要的朋友可以參考下
    2014-08-08
  • C#使用csvhelper實現(xiàn)csv的基本操作

    C#使用csvhelper實現(xiàn)csv的基本操作

    CsvHelper 是一個用于讀寫 CSV 文件的.NET庫,極其快速,靈活且易于使用,CsvHelper 建立在.NET Standard 2.0 之上,幾乎可以在任何地方運(yùn)行,本文給大家介紹了C#使用csvhelper實現(xiàn)csv的基本操作,需要的朋友可以參考下
    2024-07-07

最新評論

林州市| 柳州市| 汉源县| 菏泽市| 武隆县| 滁州市| 封开县| 巨鹿县| 益阳市| 镇原县| 新巴尔虎左旗| 广宁县| 中卫市| 华亭县| 五原县| 邢台县| 岳池县| 中方县| 洪湖市| 丽江市| 凭祥市| 梨树县| 衡水市| 山阴县| 错那县| 盐边县| 万安县| 呼和浩特市| 阿拉善盟| 阿尔山市| 南华县| 安塞县| 峨眉山市| 桐乡市| 南丹县| 吉木萨尔县| 新余市| 腾冲县| 南宫市| 徐州市| 隆尧县|