插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
static void InsertSort(int[] dataArray)
{
for (int i = 1; i < dataArray.Length; i++)
{
int iValue = dataArray[i];
bool isInsert = false;
//拿到i位置的元素 跟前面所有的元素作比较
for (int j = i - 1; j >= 0; j--)
{
if (dataArray[j] > iValue)
{
//如果发现比i大的,就让它向后移动
dataArray[j + 1] = dataArray[j];
}
else
{
//发现一个比i小的值就停下来
dataArray[j + 1] = iValue;
isInsert = true;
break;
}
}
//如果i这个值最小,所有元素都向后移动一位了,就把这个元素放到 0 号索引上
if (isInsert == false)
{
dataArray[0] = iValue;
Console.WriteLine(iValue);
}
}
}