欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實現插入排序

 更新時間:2022年08月13日 16:35:14   作者:Darren Ji  
這篇文章介紹了C#實現插入排序的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在選擇排序中,從第一個元素開始,依次遍歷數組中的元素,找出當前遍歷元素之后的最小元素,與當前遍歷元素交換位置,依此類推,是一種由前往后的排序。而在插入排序中,從第二個元素開始,依次遍歷數組中的元素,把當前遍歷元素與之前的元素進行比較,并插入到之前的某個位置,是一種由后往前的排序。

自定義一個類,里面維護著一個int[]類型數組,通過構造函數定義數組長度并初始化,并提供了打印和插入排序的相關方法。

    public class MyArray
    {
        private static int[] arr;
        private static Random r = new Random();
        public MyArray(int size)
        {
            arr = new int[size];
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = r.Next(10, 100);
            }
        }
        //插入排序
        public void Sort()
        {
            int insert;
            for (int i = 1; i < arr.Length; i++) //從第二個元素開始遍歷
            {
                insert = arr[i];//把當前遍歷元素視為插入元素,放到臨時變量insert中
                int moveItem = i;//movieItem可以理解為一個動態(tài)索引,初始位置在當前遍歷元素的索引
                while (moveItem > 0 && arr[moveItem -1] > insert) //如果前面一個元素比插入元素大
                {
                    arr[moveItem] = arr[moveItem - 1];//那就把前面這個元素賦值給后面位置,相當于往后移一位
                    moveItem--;//再把動態(tài)索引位置向前移動一位
                }
                arr[moveItem] = insert;
                Print();
            }
        }
        //打印數組元素
        public void Print()
        {
            foreach (var item in arr)
            {
                Console.Write(item + " ");
            }
            Console.WriteLine();
        }
    }

以上,大致過程是:從數組中第二個元素開始,先把當前遍歷元素賦值給一個臨時變量,比如說是insert,insert這個變量肯定要插入到當前遍歷元素之前的某個位置,如何確定插入位置呢?假設用moveItem變量表示最終要插入的索引位置,先把當前遍歷元素的索引賦值給moveItem,如果moveItem-1位置上的元素大于insert,那就把moveItem-1位置上的元素向后移動一位,并把moveItem-1位置的索引賦值給moveItem,insert是要插入到當前的這個moveItem位置嗎?不一定。再繼續(xù)拿當前moveItem位置的前面一個位置上的元素與insert比較,只要是比insert大,就把該位置上的元素向后移動一位,并重新設置moveItem的值,直到停止循環(huán)。此時moveItem的值就是insert需要插入的位置。

客戶端調用。

    class Program
    {
        static void Main(string[] args)
        {
            MyArray myArray = new MyArray(8);
            Console.WriteLine("排序前:");
            myArray.Print();
            Console.WriteLine("排序后:");
            myArray.Sort();
            Console.ReadKey();
        }
    }

對于插入排序,當依次遍歷數組元素時,進行了n-1次迭代,當把第二個元素插入到之前某個位置時進行了1次迭代,當把第三個元素插入到之前某個位置時進行了2次迭代......第n個元素進行了n-1次迭代,以時間復雜度來說,忽略小項和常數項,插入排序基本上是一個平方階,寫成O(n²)。 

到此這篇關于C#實現插入排序的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 將ocx文件轉換成C#程序引用的DLL文件的辦法

    將ocx文件轉換成C#程序引用的DLL文件的辦法

    將ocx文件轉換成C#程序引用的DLL文件的辦法,需要的朋友可以參考一下
    2013-03-03
  • c# 實現MD5,SHA1,SHA256,SHA512等常用加密算法源代碼

    c# 實現MD5,SHA1,SHA256,SHA512等常用加密算法源代碼

    c# 如何實現MD5,SHA1,SHA256,SHA512等常用加密算法,需要的朋友可以參考下
    2012-12-12
  • C#實現加密exe文件

    C#實現加密exe文件

    這篇文章主要為大家詳細介紹了C#如何實現加密exe文件的功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • C#中使用Spire.doc對word的操作方式

    C#中使用Spire.doc對word的操作方式

    這篇文章主要介紹了C#中使用Spire.doc對word的操作方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • c# 模擬線性回歸的示例

    c# 模擬線性回歸的示例

    這篇文章主要介紹了c# 模擬線性回歸的示例,幫助大家利用c#進行機器學習,感興趣的朋友可以了解下
    2020-10-10
  • C# 實現PPT 每一頁轉成圖片過程解析

    C# 實現PPT 每一頁轉成圖片過程解析

    這篇文章主要介紹了C# 實現PPT 每一頁轉成圖片過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • c# 網絡編程之http

    c# 網絡編程之http

    這篇文章主要介紹了c# 提供一個HTTP服務的實現示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C# 設計模式系列教程-代理模式

    C# 設計模式系列教程-代理模式

    代理模式對客戶端來說,隱藏了真實對象的細節(jié)及復雜性,實現了客戶端(調用者)與真實對象的松耦合,提高了運行速度。
    2016-06-06
  • 用C#實現啟動另一程序的方法實例

    用C#實現啟動另一程序的方法實例

    一段實例代碼,程序的目的是使用C#實現啟動另一程序的方法。技術總監(jiān)給出了我們這樣一個有效的啟動程序的有效方法,現在和大家分享下
    2013-07-07
  • c#定時運行程序分享(定時程序)

    c#定時運行程序分享(定時程序)

    寫了一個小的定時程序,定時觸發(fā)后可以按要求運行其它代碼,分享一下操作過程,希望能對大家有幫助
    2014-01-01

最新評論