时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定
举例:[4,3,1,5]
第一轮:
比较4,3,1,5
得 3,4,1,5
第二轮:
比较3,4,1,5
得 1,3,4,5
第三轮:
比较1,3,4,5
/// <summary>
/// 直接插入排序
/// </summary>
/// <param name="nums">待排数据</param>
public void Sort(int[] nums)
{
//最后一轮排序只有1个数字,不需要在进行比较 所以共需进行nums.Length-1次
for (int i = 0; i < nums.Length-1; i++)
{
//第一轮:第二个数与第一个数比较 保证有序
//第二轮:第三个数分别与第二个比较,如果第三个数小于第二个数,则和第二个数交换,在用第二个位置的数和第一个数比较, 保证有序 以此类推
for (int j = i+1; j-1 >=0; j--)
{
if (nums[j] < nums[j - 1])
{
int tmp = nums[j];
nums[j] = nums[j - 1];
nums[j - 1] = tmp;
}
else
{
//如果要比较的第四个数 比前面有序的最后一位第三个数还大 那么肯定比前面的更大 所以不需要再进行比较
break;
}
}
}
}