排序系列算法——插入排序

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 }

 

posted on 2015-12-19 16:56  学会分享~  阅读(553)  评论(0编辑  收藏  举报

导航