基本思想
1 将待排序序列分为两部分,一部分有序一部分无序。
2 将第一个元素看为有序序列,剩下的看为无序序列。
3 将无序序列中的元素依次从小到大插入到有序序列的合适位置。
步骤
以数组5,8,7,1,2,6,3,9,4为例从小到大排序
1 将第一个数5看为有序序列,剩下的看为无序序列。
5 | 8 | 7 | 1 | 2 | 6 | 3 | 9 | 4 |
2 将无序序列中第一个数8和有序序列比较。
8比5大直接插入即可。
5 | 8 | 7 | 1 | 2 | 6 | 3 | 9 | 4 |
3 重复第2步。
待排序元素7比8小,我们将8向后移动,然后将7和5比较,7大于5,所以我们将7插在5后面8前面。
5 | 7 | 8 | 1 | 2 | 6 | 3 | 9 | 4 |
重复此步骤直到遍历完整个数组即可完成排序。
时间复杂度
O(n²)
空间复杂度
O(1)
代码实现
#include<iostream>
using namespace std;
void InsertSort(int* nums, int n)
{
for (int j = 1; j < n; ++j)
{
int tmp = nums[j];
int i = j - 1;
while (i >= 0 && nums[i] > tmp)
{
nums[i + 1] = nums[i];
i--;
}
nums[i + 1] = tmp;
}
}
int main()
{
int nums[] = { 5,8,7,1,2,6,3,9,4 };
int n = sizeof(nums) / sizeof(nums[0]);
InsertSort(nums, n);
for (int x : nums)
{
cout << x << " ";
}
cout << endl;
}
运行结果
感谢阅读!