基本思想:以第一个元素为基准,后面的元素依次与第一个元素比较,若比它大,则不执行操作,若比它小,则插入到它的左边。
原理:
1.这里的第一个元素为12,因此以12作为基准,利用后面的元素与它进行比较。因此最外层循环应为for(i=1;i<length;i++)。当i=1时,比较a[i]和a[i-1],即与它前面的一个元素进行比较,若a[i]>a[i-1]则表明当前元素大于前一个元素,不执行任何操作。若a[i]<a[i-1]表明当前元素小于前一个元素,需要进行移动插入。此时将a[i]放入temp临时变量中。
2.此时进入第二层循环,j=i-1,该循环不断向左移动j,比较j中的元素a[j]与temp值,如果temp<a[j],则a[j+1] = a[j]。
3.内层循环第一轮结束,j--。j变为-1,跳出循环。此时a[j+1]=temp;
4.外层循环i++,i变为2。比较a[i]与a[i-1]。若a[i]<a[i-1]则将a[i]放入temp中。
5.进入内层循环for(j=i-1;j>00&&temp<a[j];j--) 中,将a[j]与temp比较。如果temp<a[j],则将a[j+1]=a[j]。
6。当j<0或者temp>a[j],则跳出循环,将temp变量放置在a[j+1]处。
void InsertSort(int list[], int n)
{
int j;
for (int i = 1; i < n; i++)
{
if (list[i] < list[i - 1])
{
int temp = list[i];
for (j = i - 1; j >= 0 && temp < list[j]; j--)
{
list[j + 1] = list[j];
}
list[j + 1] = temp;
}
}
}
int main()
{
int list[] = { 12, 5, 4, 6, 7, 6, 1 };
InsertSort(list, sizeof(list) / sizeof(int));
for (int i = 0; i < sizeof(list) / sizeof(int); i++)
{
cout << list[i] << endl;
}
}
插入排序是一种稳定的排序算法,最好情况下的时间复杂度:,最坏情况下的时间复杂度为:,平均情况下的时间复杂度为。空间复杂度为。