原理如上图,代码如下:这里就说明一点:在搜插入点时,是从位置i-1开始向前搜索,在搜索的过程中同时调整了数组中元素,
实现代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <ctime>
using namespace std ;
int* array = NULL ;
void get_rand_num(int ** parray , int len) //生成一个随机数组
{
srand((unsigned int )time(NULL)) ; //下种子
*parray = new int[len] ;
for(int i = 0 ; i < len ; i++)
{
(*parray)[i] = rand() % len ;
}
}
void insert_sort(int *array , int len )
{
if(len <= 1|| array ==NULL ) //朴素情况检查
return ;
int temp = 0 ;
for(int i = 1 ; i < len ; i++)
{
temp = array[ i ] ;
int j = i -1 ;
while( j >= 0 )
{
if(array[ j ] > temp ) //如果array[ j ]和temp构成逆序则将array[ j ]向后移动一个位置
{ array[ j + 1] = array[ j ] ; j-- ; }
else
break ; //如果array[j]和temp构成第一个“正序”则跳出.
}
array[ j + 1 ] = temp ; //将temp的值插入到array[j+1]的位置
}
}
int main(int argc , char** argv)
{
int len = 50 ;
get_rand_num(&array , len) ;
cout<<"before sort"<<endl ;
for(int i = 0 ; i < 50 ; i++)
{
cout<<"array["<<i<<"]="<<array[i]<<endl ;
}
insert_sort(array , len ) ;
cout<<"after sorting"<<endl ;
for(int i = 0 ; i < len ; i++)
{
cout<<"array["<<i<<"]="<<array[i]<<endl ;
}
delete []array ; array = NULL ;
system("pause") ;
return 0 ;
}