這幾天一直在研究算法,也算有點心得,現在跟大家分享一下,我是用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; } } } }