排序算法之插入排序

发布时间:2009/05/15      类别:算法 | 所属专题:

版权所有,转载请注明:本文出自学与思编程网

插入排序算法应该是使用最为广泛的一种排序算法了,从我们会玩扑克起我们就应该会这种算法了,现在的人有几个不会玩扑克呢?你说这种算法使用广泛不。

插入排序的基本思想是:取出未排序序列中的第一个元素,把它插入到已排序序列的合适位置。想象一下我们玩扑克,每从下面摸上来一张牌,我们就会把插入手中已有扑克的合适位置中,到最后摸完牌后,我们手上的扑克也已经按顺序排列好了。我们还是以一个简单的整数升序排序为例看看其排序过程:

假定有一组待排序整数:3,5,2,1,7    现在我们要把这5个数按升序排列。

我们把这5个数分成两部分,第一部分只有一个数3,因此它是排好序的,第二部分有 5,2,1,7  四个数,它们处于未排好序状态。下面我们就用插入排序算法把第二部分中的数插入到第一部分,直至排序完成。

第一步,取出第二部分第一个元素 5 插入第一部分,很明显它应该插入3的后面。这样结果为:3,5,2,1,7 。这时,已排好序的第一部分就有两个元素了,未排序的第二部分还有3个数。

第二步,取出第二部分第一个元素 2 插入第一部分,结果为:2,3,5,1,7 。这时第一部分有三个数,第二部分只剩下2个数了。

第三步,取出第二部分第一个元素1插入第一部分,结果为:1,2,3,5,7。排序完成。

下面是插入排序算法的c语言代码

void insertion_sort(int a[], int n)
{

int i, j;
int tmp;

for (i = 1; i < n; i++) {

tmp = a[i];
j = i – 1;

while(j >= 0 && a[j] > tmp) {

a[j + 1] = a[j];
j = j – 1;

}

a[j + 1] = tmp;

}

}

版权所有,转载请注明:本文出自学与思编程网

发表评论