表插入排序

来源:互联网 发布:七天网络查分登录 编辑:程序博客网 时间:2024/06/06 04:59

时间复杂度O(n^2),空间复杂度O(n),这是稳定的排序方法

<span style="background-color: rgb(0, 0, 0);">//表插入排序#include<iostream>#include<cstdio>using namespace std;#define Size 10#define MAX 1000typedef int Elemtype;typedef struct{    Elemtype key;    int next;}SLNode;typedef struct{    SLNode r[Size+1];    int length;}SLinkList;//初始化void crelist(SLinkList *SL){    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++)        scanf("%d",&SL->r[i].key);    SL->length=n;}//输出void list(SLinkList *SL){    for(int i=1;i<=SL->length;i++)        printf("%5d",i);    printf("\n");    for(int i=1;i<=SL->length;i++)        printf("%5d",SL->r[i].key);    printf("\n");}//调整next的指向void LInsertSort(SLinkList *SL){    int i,j,k;    SL->r[0].key=MAX;    SL->r[0].next=1;    SL->r[1].next=0;    for(i=2;i<=SL->length;i++)    {        for(j=0,k=SL->r[0].next;SL->r[i].key>=SL->r[k].key;j=k,k=SL->r[k].next);        SL->r[j].next=i;        SL->r[i].next=k;    }}//调整元素顺序,使成顺序序列void AdjustLink(SLinkList *SL){    int p,q;    p=SL->r[0].next;    for(int i=1;i<SL->length;i++)    {        while(p<i) p=SL->r[p].next;        q=SL->r[p].next;        if(i!=p)        {            SLNode t=SL->r[i];            SL->r[i]=SL->r[p];            SL->r[p]=t;            SL->r[i].next=p;        }        p=q;    }}int main(){    SLinkList *SL;    crelist(SL);    LInsertSort(SL);    AdjustLink(SL);    list(SL);    return 0;}//输入://9//65 83 100 70 10 32 7 65 9//输出://1    2    3    4    5    6    7    8    9//7    9   10   32   65   65   70   83  100</span>


0 0
原创粉丝点击