插入排序
思路:将数据分为两个部分,一部份为排序好的数据,一部分为还未排序的数据。
每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。(就像我们玩扑克牌一样,每接一张牌,都要与手中的牌进行比较,放入合适的位置,当接完最后一张牌时,手中的牌已经有序)。
时间复杂度:O(N^2)
空间复杂度:O(1)
稳定性:稳定的
适用场景:数据量比较小的,接近有序的
// 时间复杂度:O(N^2)
// 空间复杂度:O(1)
// 稳定
// 适应场景:数据量比较小,接近有序
#include<iostream>
using namespace std;
void print(int* array, int size)
{
for(int i = 0; i < size; ++i)
{
cout << array[i] << " " ;
}
cout << endl;
}
void InsertSort(int* array, int size)
{
for(int i = 0; i < size; ++i)
{
int k = array[i];
int j = 0;
for(j = i - 1; j >= 0 && k < array[j]; --j)
{
array[j +1] = array[j];
}
array[j +1] = k;
}
}
int main()
{
int array[] = {3, 5, 4, 9, 2, 0, 7, 1, 8, 6};
int size = sizeof(array) / sizeof(int);
InsertSort(array, size);
print(array, size);
return 0;
}