插入排序法
1.工作原理(算法思路)
新建一個指針,指針左邊的所有元素都是有序的。但是他們的位置並不是最終位置,一個指針從左向右掃描,若指針所在處的元素比左邊元素小,則將該元素向前浮動至適當位置,使指針左側元素仍然保持有序。當指針掃描到整個數組元素的末尾時,數組排序完成。
2.動圖演示
3.C#代碼實現
根據原理設計算法:
class Program
{
//插入排序法
public static void insertSort(int[] array)
{
//for循環:i作爲指針,進行從左到右掃描數據的工作
//指針i從1開始掃描,因爲i=0時指針左側無元素
for (int i = 1; i < array.Length; i++)
{
//temp作爲指針鍵值
int temp = array[i];
//新建變量j,從i開始向左掃描已經有序的元素,並與temp比較
//若temp小於掃描元素,則將j指針元素向右移位騰出空間
int j = i;
while (j > 0 && array[j - 1] > temp)
{
array[j] = array[j - 1];
j--;
}
//循環完成後將temp放在j指針位置,完成本次插入
array[j] = temp;
}
}
//打印數組
public static void printArray(int[] array)
{
foreach (int item in array)
{
Console.Write(item + "\t");
}
Console.WriteLine();
}
//主函數入口
static void Main(string[] args)
{
int[] array = new int[10] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
printArray(array);
insertSort(array);
printArray(array);
Console.ReadKey();
}
}
輸出結果:
4.性能分析
1)複雜度
2)插入排序法特點
- 在數組元素規模較小的時候,插入排序法的運行效率很高。其經常用在一些其他排序方法中(比如歸併排序以及快速排序)來對排序進行優化。
- 不同於選擇排序法,當一個數組幾乎有序的時候,插入排序法所需要的時間要比其他的排序法快得多。因此插入排序法的排序時間取決於數組元素的初始順序,在最好的情況下,插入排序法運行時間能達到線性級別。