插入排序法

模型:扑克牌

   开始时,我们左手为空并且桌上的牌面向下。然后我们每次从桌上拿走一张牌并将它插入左手中正确的位置。

   为了找到一张牌的正确位置,我们从右到左将它与已经在左手中的每张牌进行比较,拿在左手中的牌总是

   排好序的,原来这些牌是桌上牌堆中顶部的牌

 

伪代码:

我们用缩进表示块结构。
当一个 for 循环每次迭代增加其循环次数时,我们使用关键词 to,反之则用 downto。
当循环计数器以大于 1 的一个量改变时,该该变量跟在可选关键词 by 之后。

复合数据通常被组织成对象,对象又由属性组成。我们使用许多面向对象编程语言中创建的句法来
访问特定的属性:对象名后跟一个点再跟属性名。

有时一个指针根本不指向任何对象。这时,我们赋给它特殊值 NIL。

//INSERTION-SORT(A)
   
     for j=2 to A.length
         key=A[j]
         // Insert A[j] into the sorted sequence A[1..j-1].
         i=j-1
         while i>0 and A[i]>key
               A[i+1]=A[i]
               i=i-1
         A[i+1]=key

例代码(升序):

#include<stdio.h>
int *insert(int num[],int n);
int main(void)
{
    int i,*p,a[]={5,2,4,6,1,3};
    int x=sizeof(a)/sizeof(a[0]);
    p=insert(a,x);
    for(i=0;i<x;i++)
    {
        printf("%2d",*(p+i));
    }
    printf("\n");
    return 0;
}

int *insert(int num[],int n)
{
    int i,j,key;
    for(j=1;j<n;j++)
    {
        key=num[j];
        i=j-1;
        while(i>=0 && num[i]>key)
        {
            num[i+1]=num[i];
            i--;
        }
        num[i+1]=key;
    }
    return num;
}

 

posted @ 2018-07-10 18:24  M-Anonymous  阅读(260)  评论(0编辑  收藏  举报