打印

有关插入排序的疑问?

[复制链接]
1748|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
plato2008|  楼主 | 2010-2-27 21:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看到一个插入排序的例子源码如下
#include <stdio.h>

#define LEN 5
int a[LEN] = { 10, 5, 2, 4, 7 };

void insertion_sort(void)
{
        int i, j, key;
        for (j = 1; j < LEN; j++) {
                printf("%d, %d, %d, %d, %d\n",
                       a[0], a[1], a[2], a[3], a[4]);
                key = a[j];
                i = j - 1;
                while (i >= 0 && a[i] > key) {
                        a[i+1] = a[i];
                        i--;
                }
                a[i+1] = key;
        }
        printf("%d, %d, %d, %d, %d\n",
               a[0], a[1], a[2], a[3], a[4]);
}

int main(void)
{
        insertion_sort();
        return 0;
}
本例中程序的运行结果如下
10, 5, 2, 4, 7
5, 10, 2, 4, 7
2, 5, 10, 4, 7
2, 4, 5, 10, 7
2, 4, 5, 7, 10
疑问:感觉本例的排序算法用的并不是插入排序,我所理解的插入排序应该是就是将一组数据插入到已经排好序的有序数据中,从而得到一组新的有序数据。

相关帖子

沙发
plato2008|  楼主 | 2010-2-27 22:21 | 只看该作者
是我对这段程序理解有问题是程序本身的问题?

使用特权

评论回复
板凳
谈的元| | 2010-2-28 09:16 | 只看该作者
名字不主要:

你这个的思路是用后者与前面的所有数据比较,小就交换,也相当插入到啊

比如由2, 5, 10, 4, 7  变为
2, 4, 5, 10, 7的时候,就可以认为将4插入2,5之间

使用特权

评论回复
地板
plato2008|  楼主 | 2010-2-28 23:24 | 只看该作者
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

51

帖子

0

粉丝