常见的排序算法,包括像冒泡排序、选择排序、插入排序等等这些常见的排序算法,背后的原理以及相应的代码实现需要我们一一深究。
下面我们主要探究一下插入排序背后的原理以及代码实现。
如下,我们定义数组a
int a[7]={12,20,8,,17,52,49,6};
数组在内存中的数据结构如下:
选择排序开始-------》
第一轮,首先使第一个位置的元素为有序的,如下图
然后判断它的下一位数字20,和它比较,20>12,也是递增有序的,如下,将20纳入框内,框表示已经排好序的元素
下一步将8纳入框内,进行判断,如下所示:
紧接着比较8和前面两个数的大小,将8插入合适的位置
思路是:将8首先存入一个临时变量temp中,由于20>8,将20放入8的位置,再比较8和12的大小,12>8,将12放入它右边第一个也就是20的位置,最后将temp中的值放入12的位置。将8、12、20顺序递增排序。如下图:
下一步继续将17纳入框内,进行比较,如下图:
由于20>17,因此将17存入临时变量temp中,将20的值存入17的位置,继续比较12和17的值,12<17,将17存入20的位置,这个框排序完成,如下图:
继续比较后续的值,按照这样的思路,最终实现如下这样的结果:
最终实现插入排序的算法
C语言的代码实现如下:
void insert_Sort(int *br, int n)
{
int temp = 0;
assert(NULL != br && n > 1);
//对i从1到数组最后一位进行和前面比较的操作
for (int i = 1; i < n; ++i)
{
if (br[i - 1] > br[i])
{
temp = br[i];
int j = i - 1;
do
{
br[j + 1] = br[j];
--j;
} while (j >= 0 && temp < br[j]);
br[j + 1] = temp;
}
}
}