QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 911|回复: 4

直接插入排序

[复制链接]
发表于 2005-8-31 15:14:08 | 显示全部楼层 |阅读模式
我根据<<数据结构>>中描述的算法,用C语言实现的直接插入排序法:

[code:1]
#include <stdio.h>
#include <stdlib.h>

int insertSort(char *buf);

int main(){
        char buf[] = "hgsdkaslda";

        printf("%s\n", buf);
        insertSort(buf);
        printf("%s\n", buf);
}

int insertSort(char *buf)
{
        char tmp;
        char *tmpbuf;
        int len;
        int i, j;

        len = strlen(buf);

        tmpbuf = malloc(len +1);
       
        *tmpbuf = *buf;
        memcpy(tmpbuf +1, buf, len);
       
        for(i = 2; i <= len; i++) {
                if ( tmpbuf[i] < tmpbuf[i-1] ) {
                        tmpbuf[0] = tmpbuf[i];

                        for(j = i-1; tmpbuf[0] < tmpbuf[j]; --j)
                                tmpbuf[j+1] = tmpbuf[j];
                        tmpbuf[j+1] = tmpbuf[0];
                }
        }

        memcpy(buf, tmpbuf+1, len);
        return len;
}
[/code:1]
发表于 2005-8-31 16:23:07 | 显示全部楼层
楼主,
为什么用--j,而不用j--呢?
我觉得你那样不好理解
小d愚笨,请多指教!
回复

使用道具 举报

发表于 2005-8-31 18:11:49 | 显示全部楼层
--j 和 j--在这里效果是一样的,甚至可以说生成的汇编代码也应该是一样的(经过编译器优化)
从效率的角度上来说 --j 比 j--要更好一些。因为少了一次结果保存。
回复

使用道具 举报

 楼主| 发表于 2005-8-31 22:12:25 | 显示全部楼层
我对--j和j--没有什么研究,想不到goodboy1881兄有这样的高见,真是佩服!
回复

使用道具 举报

发表于 2005-9-1 12:04:18 | 显示全部楼层
佩服至极!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 11:51 , Processed in 0.069744 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表