1.2 直接插入排序
直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成一个有序表和一个无序表。开始时有序表值包含一个元素,无序表中有n-1个元素,排序过程中每次从无序表中取出一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1此可完成排序过程。
//直接插入排序
void insertSort(int* array,int len)
{
for (int i = 1; i < len; ++i)//从第二个元素开始
{
if (array[i-1] > array[i])//前一个大于后一个
{
int temp = array[i];
int j;
//将比a[i]大的数据向后移
for (j = i - 1; j >= 0 && array[j] > temp; j--)
{
array[j + 1] = array[j];
cout << array[j + 1] << array[j] << endl;
}
//将a[i]放到正确位置上
array[j + 1] = temp;
}
}
}
直接插入排序的时间复杂度和稳定性:
时间复杂度:
假设被排序的数列中有n个数,遍历一趟的时间复杂度为O(n),需要遍历n-1次。因此,时间复杂度为O(n2)。
稳定性: 稳定