表插入排序
来源:互联网 发布:七天网络查分登录 编辑:程序博客网 时间: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
- 插入排序:表插入
- 插入排序之表插入
- 插入排序:表折半插入
- 排序3:插入排序(普通插入排序 + 折半插入排序 + 链表插入排序 + 希尔排序)
- 1.4插入排序-表插入排序
- 数据结构-插入排序-表插入排序
- 插入排序:直接插入排序 二分法插入排序 表插入排序 Shell排序
- //插入排序 直接插入排序 二分插入排序 2-路插入排序 表插入排序 希尔排序
- 表插入排序
- 表插入排序
- 链表插入排序
- 链表插入排序
- 表插入排序
- 表插入排序
- 链表插入排序
- 链表插入排序
- 表插入排序
- 链表插入排序
- 原来单例模式可以这样实现
- 把ctor和非成员函数虚化
- Union Find算法
- 1.创建型.1工厂模式
- 一种大规模网络流式数据缓存写入的方法
- 表插入排序
- Bash别名与快捷键
- Bash历史命令
- 模板超编程和tuple的输出
- Bash通配符及特殊符号
- Linux网络配置
- 接口应用の接口实现匿名类对象
- 数据库表的冷备份
- 初探Object-c