原理
- 将右边无序的序列插入到左边有序的序列中
步骤(假设从小到大):
- 从第1个数(0为起始)开始:
- if ( array[1] < array[0] ),则temp=array[1]
- 然后移动,
- 再循环,开始从array[2] 往前面进行比较,8>4,不动,再到array[3]
- 0<8, temp=0
- 然后进行移动j−−j--j−−
- temp 在和前面比较,比他小,再移动 j−−j--j−−
- 再进行i++ ,到5了,5和前一个比较,循环操作
- 在什么情况下效率最高:
- 本来序列就基本有序的清空下
- 序列数据比较少的时候
代码
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <time.h>
void Insert_Sorting(int array[], int length)
{
int tmp,j;
for (int i = 1; i < length; i++)
{
if (array[i] < array[i - 1])
{
tmp = array[i];
for ( j = i-1; j >= 0 && tmp < array[j]; j--)
{
array[j+1] = array[j];
}
array[j+1] = tmp;
}
}
}
int main(void)
{
int array[10];
int length = sizeof(array) / sizeof(int);
srand((unsigned)time(NULL));
for (int i = 0; i < length; i++)
{
array[i] = rand()%10;
cout << array[i] << " ";
}
cout << endl;
Insert_Sorting(array,length);
for (int i = 0; i < length; i++)
cout << array[i] << " ";
cout << endl;
return 0;
}
结果: