博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

插入排序算法

Posted on 2011-01-07 14:21  天地玄黄  阅读(433)  评论(0编辑  收藏  举报

这是我自己写的一个插入排序的算法,main函数是测试用的,insertion_sort()函数就是插入排序的算法:

/*Author:       Eric
*Time: 2011.01.07
*
*插入排序
*/
#include <stdio.h>

void insertion_sort(int a[], int n)
{
int i = 1;
int k = 0;
while(i < n)
{
int temp = a[i];
for(k = i-1; k >= 0; k--)
{
if(temp < a[k])
a[k+1] = a[k];
else
{
a[k+1] = temp;
break;
}
}
if(k == -1)
a[0] = temp;
i++;
}
}

int main()
{
int i = 0;
int a[] = {6,3,4,3,7,11,3};
insertion_sort(a, 7);

printf("a =");
for(i = 0; i < 7; i++)
printf(" %d", a[i]);
printf("\n");

return 0;
}
 

看了一下网上的源码,又有了一些改进,让代码更加紧凑。不过算法还是不是很明晰,看来需要专门学习一下算法了。

 

void insertion_sort(int a[], int n)
{
        int i = 1;
        int k = 0;
        while(i < n)
        {
                int temp = a[i];
                k = i-1;
                while(k >= 0 && a[k] > temp)
                {
                        a[k+1] = a[k];
                        k--;
                }
                a[k+1] = temp;
                i++;
        }
}