直接插入排序算法

 代码分析:直接插入排序算法的平均移动次数与平均比较次数同级,都是O(n²),所以,直接插入排序的平均时间复杂度为T(n)=O(n²)。算法中引入了一个附加的记录空间temp,因此辅助空间为S(n)=O(1).直接插入排序是稳定的。

 

#include "stdio.h"
#include "malloc.h"

typedef int KeyType;
typedef int DataType;

typedef struct {
    //排序码字段
    KeyType key;
    //记录的其他字段
    DataType info;
}RecordNode;

typedef struct
{
    int n;
    RecordNode * record;
}SortObject;

 

//按递增序进行直接插入排序
void insertSort(SortObject * pvector)
{
    int j,i;
    RecordNode temp;
    for(i=1;i<pvector->n;i++)
    {
        temp=pvector->record[i];
        j=i-1;

        while ((j>=0)&&(temp.key<pvector->record[j].key)) 
        {
            pvector->record[j+1]=pvector->record[j];
            j--;
        }

        if (j!=(i-1)) {
            pvector->record[j+1]=temp;

        }    
    }
    
    for(i=0;i<pvector->n;i++)
    {
        printf("%d ",pvector->record[i]);
    }

}

 

int main(int argv ,char * argm[])
{
    int i,j=0,l,k,p;
    SortObject * object=(SortObject *)malloc(sizeof(SortObject));
    RecordNode * node=(RecordNode *)malloc(sizeof(RecordNode));
    printf("请输入数组的长度 \n");
    scanf("%d",&i);
    p=i;

    while (i>0) 
    {    
        printf("请输入数组的字段 \n");
        scanf("%d",&l);
        node[j].key=l;
        j++;
        i--;
    }
    
    object->record=node;
    object->n=p;
    
    insertSort(object);    
    return 1;

}

结果:

posted on 2012-05-17 21:34  yucong  阅读(365)  评论(0)    收藏  举报

导航