您的位置:首页 > 其它

各种排序算法的实现-5(表插入排序-2)

2013-12-29 01:10 197 查看
主要实现 表从小到大 按顺序整理:


#define SIZE 8

typedef struct
{
int data;
int next;
}s_node;

typedef struct
{
s_node r[SIZE + 1];
}list_type;

void TB_sort(list_type & list)
{
list.r[0].next = 1;
list.r[1].next = 0;	//初始状态

int p, q;
for (int i = 2; i <= SIZE; i++)
{
p = list.r[0].next;
q = 0;
while (p > 0 && list.r[p].data <= list.r[i].data)
{
q = p;
p = list.r[p].next;
}
list.r[q].next = i;
list.r[i].next = p;
}
}

void arrange(list_type & list)
{
int  p = list.r[0].next;
int temp;
for (int i = 1; i<= SIZE; i++)
{
while (p < i) p = list.r[p].next;		//找到没有排好序的 第一个出来
temp = list.r[p].next;
if (p != i)
{
std::swap(list.r[p], list.r[i]);
list.r[i].next = p;
}
p = temp;
}
}

int main(int argc, char* argv[])
{
s_node  node[SIZE + 1];
node[0].data = 0;//这个节点用作哨兵节点

node[1].data = 23;
node[2].data = 324;
node[3].data = 23;
node[4].data = 333;
node[5].data = 98;
node[6].data = -1;
node[7].data = 45;
node[8].data = -345;

list_type list;
memcpy(list.r, node, sizeof(s_node) * (SIZE + 1));
TB_sort(list);

int   temp = list.r[0].next;

for (int i = 1; i<=SIZE; i++ )
{
printf("%d ", list.r[temp].data);
temp = list.r[temp].next;
}

arrange(list);

printf("\n");

for (i = 0; i<SIZE; i++)
{
printf("%d  ", list.r[i + 1]);
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: