#include"stdio.h"
#include"stdlib.h"
/****************************************************
copyright: self_chou
Filename: directsort.c
AUthour : self_chou Version: 1.0 Date: 2012.07
Description: 用链表实现直接选择排序
Function List:
find(); 寻找链表中最小的结点并返回
change();交换链表中指定结点的位置
sort(); 调用前两个函数实现功能
*******************************************************/
typedef struct node
{
int num;
struct node *next;
}node;
node *head = NULL;
node *last = NULL;
node *flag = NULL; //用来记录结点交换的位置,从链表头开始
print()
{
node *p = head;
while(p != NULL)
{
printf("%d ",p->num);
p = p->next;
}
printf("\n");
}
node * find(node *head)
{
node *min = head;
while(head != NULL)
{
if(head->num < min->num) //找指定头结点链表中最小的结点
{
min = head;
}
head = head->next;
}
return min;
}
void change(node *q,node *p)
{
node *pfront = NULL;
node *qfront = NULL;
node *find = head;
node *temp = NULL;
if( p == q) //交换分,是不是头结点,和结点相不相邻,四种情况
{
flag = p;
return;
}
while( find != q)
{
qfront = find;
find = find->next;
}
find = head;
while( find != p)
{
pfront = find;
find = find->next;
}
if( pfront == NULL)
{
if( qfront == head)
{
p->next = q->next;
q->next = p;
head = q;
flag = q;
}
else
{
temp = p->next; //注意temp指向next,这儿犯错了。。。
qfront->next = p;
p->next = q->next;
q->next = temp;
head = q;
flag = q;
}
}
else
{
if( qfront == p)
{
pfront->next = q;
p->next = q->next;
q->next = p;
flag = q;
}
else
{
temp = q->next;
pfront->next = q;
q->next =p->next;
qfront->next = p;
p->next = temp;
flag = q;
}
}
}
void sort()
{
node *p = head;
node *min = NULL; //实现程序的主要功能
int n = 4;
while(p != NULL)
{
min = find(p);
change(min,p);
p = flag;
p = p->next;
}
}
int main()
{
int i ;
int get;
printf("please input the six num:\n");
for(i = 1;i <= 6;i++)
{
scanf("%d",&get);
node *p = (node *)malloc(sizeof(node));
p->num = get;
if(head == NULL)
{
head = p;
last = p;
}
else
{
last->next =p;
last = p;
}
last->next = NULL;
}
printf("排序前\n");
print();
flag = head;
sort();
printf("排序后\n");
print();
return 0;
}
链表实现直接选择排序
最新推荐文章于 2022-01-27 10:24:47 发布
本文介绍了一种使用链表来实现直接选择排序的方法,并提供了完整的C语言代码示例。通过定义链表节点结构体,实现了寻找最小节点、节点交换及排序等功能。
700

被折叠的 条评论
为什么被折叠?



