直接插入排序法是一种简单的排序方法,它的基本思想就是把一个元素按升序或降序插入已经有序的一个序列里面,插入后保持序列的有序。假设有序列data[1..n],则将data[2]插入data[1..1]中,将data[3]插入data[1..2]中,将data[4]插入data[1..3]中。如此经过n-1次的插入,便可以使data[1..n]有序。
template<typename T>
void straipass(T *data,unsigned pos)

...{//一趟直接插入排序
//假设data[0..pos-1]是有序序列(data[i]<=data[i+1]),现将data[pos]插入data[0..pos-1]序列中,并保持有序
T x = data[pos];
int i = pos-1;
//按升序排列,如果按降序排序则用(data[i] < x)
for(; (i>=0) && ( data[i] > x ); i--)

...{
data[i+1] = data[i];
}
data[i+1] = x;
}

template<typename T>
void straisort(T *data,unsigned len)

...{//直接插入排序
for(unsigned i=1; i<len; i++)

...{
straipass( data, i );
}
}
int _tmain(int argc, _TCHAR* argv[])

...{


int arr[] = ...{100,5,1,3,11,3,6,-1};
straisort( arr, sizeof(arr)/sizeof(arr[0]) );
return 0;
}
一次直接插入排序的算法如下:
















对于任何一次序列,我们只要经过n-1次插入便可实现排序:










调用方法如下:









