算法思路
单链表实现选择排序的方法有很多种,我的方法是将一个链表分为三部分:
第一部分 + p1 + 第二部分+ p2 + 第三部分
第一部分的链表存的是P1之前的所有结点,第二部分的链表存的是p1-p2之间所有的结点,第三部分的链表存的是p2后面的所有结点,然后每次for循环时分8种情况(每个部分存在与否)对三个链表和p1 p2进行组合,最后即可对链表进行选择排序。
代码实现
#include<stdio.h>
#include<stdlib.h>
typedef struct stu_node{
int data;
struct stu_node *next;
}node;
int main(void){
node *head,*p,*tail;
int data;
head=tail=NULL;
printf("请输入数据:\n");
scanf("%d",&data);
while(data!=0){
p=(node*)malloc(sizeof(node));
p->data=data;
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
//printf("请输入下一个数据:\n");
scanf("%d",&data);
}
printf("原始顺序:");
node *p1,*p2,*temp,*p3,*p0=NULL;
for(p1=head;p1!=NULL