C#插入排序詳解


這幾天一直在研究算法,也算有點心得,現在跟大家分享一下,我是用C#做的

排序算法是想要成為大蝦程序員必須要掌握的技術,它其實也是一種思想,你對算法熟悉,對以后編程有很大幫助

算法思路

⒈ 從第一個元素開始,該元素可以認為已經被排序
⒉ 取出下一個元素,在已經排序的元素序列中從后向前掃描
⒊ 如果該元素(已排序)大於新元素,將該元素移到下一位置
⒋ 重復步驟3,直到找到已排序的元素小於或者等於新元素的位置
⒌ 將新元素插入到下一位置中
⒍ 重復步驟2~5
 
圖解
  
使用插入排序為一列數字進行排序的過程
 
C#代碼實現
為了讓大家可以直接復制用 我全部貼上
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 插入排序
{
    //插入排序在大概有序時速度會快很多,比如:3,1,7,4,5,9,10,15,12
    //這種,你會發現大概上已經升序了,這時插入快,
    //平時速度跟其他排序是差不多的.

    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = { 30, 12, 56, 78, 12125, 56, 44, 212, 45, 787, 21, 22, 56, 65 };  //待排序數組
            InsertSort(arr);    //調用插入排序函數    
            foreach (int item in arr)
                Console.WriteLine(item);
        }

        private static void InsertSort(int[] arr)
        {
            //插入排序是把無序列的數一個一個插入到有序的數
            //先默認下標為0這個數已經是有序
            for (int i = 1; i < arr.Length; i++)
            {
                int insertVal = arr[i];  //首先記住這個預備要插入的數
                int insertIndex = i - 1; //找出它前一個數的下標(等下 准備插入的數 要跟這個數做比較)

                //如果這個條件滿足,說明,我們還沒有找到適當的位置
                while (insertIndex >= 0 && insertVal < arr[insertIndex])   //這里小於是升序,大於是降序
                {
                    arr[insertIndex + 1] = arr[insertIndex];   //同時把比插入數要大的數往后移
                    insertIndex--;      //指針繼續往后移,等下插入的數也要跟這個指針指向的數做比較         
                }
                //插入(這時候給insertVal找到適當位置)
                arr[insertIndex + 1] = insertVal;
            }
        }
    }
}

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM