想象打斗地主这类棋牌游戏,新摸一张牌我们需要将其 插入 到适当的位置,比如:
从右至左,依次与手牌比较,如果比手牌位置小,就左移一个位置
插入排序也是这样的顺序,这样对于一个新的元素来讲,不一定需要完全与所有元素比较一次
当插入完成后,0 ~ 当前位置就是有序的
示例:
{3,5,6,2,2,3,4,1} | 5<>3 |
{3,5,6,2,2,3,4,1} | 6<>5 |
{3,5,6,2,2,3,4,1} | 2<>6 |
{3,5,2,6,2,3,4,1} | 2<>5 |
{3,2,5,6,2,3,4,1} | 2<>3 |
{2,3,5,6,2,3,4,1} | 2<>6 |
{2,3,5,2,6,3,4,1} | 2<>5 |
... .... | ... |
代码:
// 插入排序
void insertionSort(int *arr, int len)
{
if(arr == NULL || len < 2)
return;
int i,j;
for(i=1; i<len; i++) // 1~len 做到有序
{
for(j=i-1; j>=0 && arr[j] > arr[j+1]; j--)
swap(arr, j, j+1);
}
}