插入排序就像打“斗地主”一样,手中的牌按大小顺序排列,当新拿到一张牌,插入手中合适的位置。对于数组的插入排序,在新数据插入到合适位置之前,必须给该数据腾出空间(需要对大于该数据的原数据进行移位)。
插入排序的原理相对较简单,插入排序对于有序的序列效率很高,详见下面代码。
希尔排序是插入排序的加强版,希尔排序增加了一个“步长”(也有的叫增量),既将现有的数据按照一定的步长分组,对该组内的数据进行排序;这个“步长”也会随着每次组内排序完毕重新生成新的步长(步长渐短),直到最后步长为“1”。
下面用以下数据为例:
int array[10] = {9,8,7,1,2,3,6,5,4,0};
当step = 10/2, {9,3},{8,6},{7,5},{1,4},{2,0}各为一组,分别插入排序
结果: array[10] = {3,6,5,1,0,9,8,7,4,2};
当step = 5/2, {3,5,0,8,4},{6,1,9,7,2}各为一组,分别插入排序
结果: array[10] = {0,1,3,2,4,6,5,7,8,9};
当step = 2/2, {0,1,3,2,4,6,5,7,8,9}为一组,进行插入排序
结果: array[10] = {9,8,7,1,2,3,6,5,4,0};
初次看“插入
插入排序的原理相对较简单,插入排序对于有序的序列效率很高,详见下面代码。
希尔排序是插入排序的加强版,希尔排序增加了一个“步长”(也有的叫增量),既将现有的数据按照一定的步长分组,对该组内的数据进行排序;这个“步长”也会随着每次组内排序完毕重新生成新的步长(步长渐短),直到最后步长为“1”。
下面用以下数据为例:
int array[10] = {9,8,7,1,2,3,6,5,4,0};
当step = 10/2, {9,3},{8,6},{7,5},{1,4},{2,0}各为一组,分别插入排序
结果: array[10] = {3,6,5,1,0,9,8,7,4,2};
当step = 5/2, {3,5,0,8,4},{6,1,9,7,2}各为一组,分别插入排序
结果: array[10] = {0,1,3,2,4,6,5,7,8,9};
当step = 2/2, {0,1,3,2,4,6,5,7,8,9}为一组,进行插入排序
结果: array[10] = {9,8,7,1,2,3,6,5,4,0};
初次看“插入