1. 原理
插入排序是基本的排序算法之一,其基本原理是将无序的元素不断插入到已排序的序列中,直到所有的元素已全部插入为止。如下图所示:
刚开始,已排序的序列是空的,一步一步从未排序的序列中将数据插入到已排序的序列中,已排序的序列长度不断增加,为排序的序列长度不断减小,最终完成全序列排序时,未排序的序列为空。第一次插入,序列中没有元素,直接插入即可;第二次插入,序列中只有一个元素,跟该元素进行对比,确定将插入元素的位置;第三次插入,序列中有两个元素,跟这两个元素对比,确定插入的位置;...直到所有的元素都已经插入为止。
2.排序过程及算法设计
排序过程
以一个实际的例子为例:
设有序列{7,9,6,12,15,11},使用插入排序对上述的序列按从小到大进行排序,排序的过程可描述如下:
算法设计
插入排序是将元素插入已排序序列的过程,排序过程需要将元素与已排序的序列元素进行对比,采用从后往前的对比顺序,不断向前移动,直到不能向前移动为止,此时的位置就是要插入元素所属的位置。如对元素6进行插入排序,排序的过程如下图所示:
其余所有元素的排序过程与上述过程类似。
3. C++源码
1 #include "stdafx.h" 2 3 #include <iostream> 4 5 using namespace std; 6 7 void insection_Sort(int *values,int length){ 8 9 for(int i=0;i<length;i++){ 10 11 int currentValue = *(values+i); //currentValue表示要插入元素的值 12 13 int index=i-1; //index表示要与插入元素currentValue对比的元素的下标 14 15 while(currentValue<*(values+index)&&index>=0){ 16 17 *(values+index+1)=*(values+index); //若当前位置的元素比插入元素要大,将当前元素向后移一位 18 19 index--; 20 21 } 22 23 *(values+index+1)=currentValue; //此时index表示插入元素的下表,对该位置复制currentValue 24 25 } 26 27 }