表插入排序

#include<iostream>
using namespace std;
#define SIZE 100
typedef struct
{
	int data;
	int next;
}SLNode;


typedef struct
{
	SLNode r[SIZE];
	int length;
}SLinkListType;
void Build(SLinkListType &s)
{
	int n,j,k;
	s.r[0].data = 100000;
	cout << "请输入你要输入的数的总数" << endl;
	cin >> s.length;
	for (int i = 1; i <= s.length; i++)
	{
		cout << "请输入第" << i << "个数" << endl;
		cin >> s.r[i].data;
		s.r[i].next = 0;
	}
	s.r[0].next = 1;
	int flag = 1, flag1, flag2;
	for (int i =  2;i <=s.length; i++)
	{
		flag1 = s.r[0].next;
		if (s.r[i].data < s.r[flag1].data)//是否是第一个数
		{
			s.r[i].next = flag1;
			s.r[0].next = i;
		}
		else if(s.r[i].data>s.r[flag].data)//是否是最后一个数
		{
			k = flag;
			s.r[k].next = i;
			s.r[i].next = 0;
			flag = i;
		}
		else//在中间的情况
		{
			flag1 = s.r[0].next;
			flag2 = s.r[flag1].next;
			while (s.r[i].data > s.r[flag2].data)
			{
				flag1 = flag2;
				flag2 = s.r[flag2].next;
			}
			s.r[i].next = s.r[flag1].next;
			s.r[flag1].next = i;
		}
	}

}


void Arrage(SLinkListType &s)
{
	int p, i, q;
	p = s.r[0].next;
	SLNode temp;
	for (i = 1; i < s.length; i++)
	{
		while (p < i)//p如果小于i说明原来的下标是虚假的
			p = s.r[p].next;
		q = s.r[p].next;
		if (p != i)
		{
			temp = s.r[p];
			s.r[p] = s.r[i];
			s.r[i] = temp;
			s.r[i].next = p;
		}
		p = q;
	}
}

void Print(SLinkListType s)
{
	int i = s.r[0].next;
	while (i != 0)
	{
		cout << s.r[i].data << "  " << endl;
		i = s.r[i].next;
	}
}
void Print1(SLinkListType s)//打印调整后的
{
	int i;
	for (i = 1; i <= s.length; i++)
		cout << s.r[i].data << endl;
}


int main()
{
	SLinkListType s;
	Build(s);
	Print(s);

	Arrage(s);
	cout << "调整后的" << endl;
	Print1(s);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值