随笔-145  评论-173  文章-70  trackbacks-0
#include<stdio.h>

int Insert_sort(int *p,int length)
{
    int i,j,key;
    for(i=1;i<=(length-1);i++)
    {
       if(*(p+i)<*(p+i-1))
       {
           key=*(p+i);
           *(p+i)=*(p+i-1);
           for(j=i-1;j>=0 &&key<*(p+j);--j)
           {
               *(p+j)=*(p+j-1);
           }
           *(p+j+1)=key;
       }
    }

    return 0;
}

int main()
{
    int a[10]={0,4,1,9,5,7,2,3,6,8};
    int i;
    int *p=&a[0];
    Insert_sort(p,10);
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
}


通过指针调用的形式来改变原来数组中的值,这样就可以了。而每一个数组元素都可以用指针加位移量来确定

#include<stdio.h>
void main()
{
    
int i,j;
    
//a[0]为哨兵,所以它的值随便,但是注意要排序的是后面的几个,而且长度也是后面的几个。
    int a[11]={0,1,2,4,9,0,3,8,6,7,5};
    
//插入排序
    for(i=2;i<=10;++i)
    
{
       
if(a[i]<a[i-1])
       
{
           a[
0]=a[i];        //已经保存了a[i],所以下面就不必担心被冲掉。
           a[i]=a[i-1];
           
for(j=i-2;a[0]<a[j];--j)
           
{
               a[j
+1]=a[j];
           }

           a[j
+1]=a[0];
       }


    }

    
for(i=1;i<11;i++)              //从a[1]开始输出,这样才消除了哨兵。
    {
        printf(
"%d ",a[i]);
    }

}



注意真正的排序部分是从a[
1]开始的,还有长度length不是数组的长度,而是实际要排序的长度,这里把a[i]冲掉的步骤很好,而且没有影响,因为已经保存下来了。

--------------------《数据结构         严蔚敏版》


 1#include<stdio.h>
 2void main()
 3{
 4    int a[10]={0,4,1,9,5,7,2,3,6,8};
 5    int key,i,j;
 6    for(i=1;i<=9;i++)
 7    {
 8        if(a[i]<a[i-1])
 9        {
10            key=a[i];
11            a[i]=a[i-1];
12            for(j=i-1;j>=0 && key<a[j];--j)
13            {
14                a[j]=a[j-1];
15            }

16           a[j+1]=key;
17        }

18    }

19         for(i=0;i<10;i++)
20         {
21             printf("%d ",a[i]);
22         }

23}

24
posted on 2009-11-27 21:29 deercoder 阅读(253) 评论(0)  编辑 收藏 引用 所属分类: 数据结构和算法分析

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理