理解:
直接插入排序法,假设数组arr[n],先选取arr[1],将arr[1]保存为temp,再将arr[1]与arr[0]比较,如果arr[1]小于它前面的arr[0],则将arr[0]的值右移至arr[1]的位置,即把arr[i]与arr[i-1]作比较,如果arr[i]小于arr[i-1],则将arr[i-1]及其之前的值右移,直到arr[i]大于或等于arr[i-1]为止,这时再将arr[i]插入这个位置,如下图所示,橙色代表选取出来要进行插入的数据,绿色代表已经插好的数据:
实现代码如下:
static void Main(string[] args)
{
int[] arr = new int[10] { 5, 78, 96, 52, 569, 22, 36, 48, 99, 75 };
Console.WriteLine("Before sort:");
Show(arr);
Console.WriteLine("After sort:");
InsertionSort(arr);
Show(arr);
}
static void Show(int[] arr)
{
foreach (var item in arr)
Console.Write(item + "\t");
Console.WriteLine();
}
static void InsertionSort(int[] arr)
{
int temp, origin;
for (int i = 1; i < arr.Length; i++)
{
temp = arr[i];
origin = i;
while (origin>0&&arr[origin-1]>temp)
{
arr[origin] = arr[origin - 1];
origin--;
}
arr[origin] = temp;
}
}