直接插入排序
- 思路
- 直接插入排序
思路
扑克牌是我们几乎每个人都可能玩过的游戏。最基本的扑克玩法都是一边摸牌,边理牌。假如我们拿到了这样一手牌,如下图所示:
理牌的方法都是不用教的。将3和4移动到5的左侧,再将2移动到最左侧,顺序就算是理好了。这里,我们的理牌方法,就是直接插入排序法。
首先,我们由上动图可知:
插入排序是吧一个数组里的每一个数字往前遍历,比较大小,若排升序,则若该数字小于前一个数字,则吧前一个数字往后移动,自己往前走一步。
当不小于前面这个数字时,则吧该数字插到空位。
重复以上步骤。
我们规定,从第一个数字开始,第二个数字与第一个相比,若小,则交换位置。
所以整体的遍历,i 应该从 0 开始,i < n-1.
直接插入排序
InsertSort.c
//直接插入排序void InsertSort(int* a, int n){for (int i = 0; i < n - 1; i++){int end = i;int tmp = a[end + 1];//单趟排序while (end >= 0){if (tmp < a[end]){a[end + 1] = a[end];end--;}elsebreak;}a[end + 1] = tmp;}}
代码测试
结果: