目录
以升序为例
定义节点结构
typedef struct node{
int data;
struct node *next;
}Node,*LinkList;
选择排序思路
先假设 p2最小,pmin指向p2,然后p2 向后移动,依次比较p2->data 与pmin->data 的大小,用pmin指向最小的节点,p2走到最后节点 后,pmin与p1作比较满足条件 进行data域值的交换。具体过程见下面代码。
选择排序代码
int selecrSort(LinkList phead){
LinkList p1=phead->next;//存在头节点,p1指向第一个
LinkList p2=NULL;//
int temp;//定义临时变量为后面做交换时使用
LinkList pmin=NULL;//定义最小值指针
while(p1->next!=NULL){
p2=p1->next;//从最小
pmin=p2;//
while(p2!=NULL){// 这个循环,p2指针向后找最小的data 并用pmin指向这个最小值的节点
if(p2->data<=pmin->data)
{
pmin=p2;
}
p2=p2->next;
}
if( p1->data >= pmin->data){//比较最小值节与前p1的大小
temp=p1->data;
p1->data=pmin->data;
pmin->data=temp;
}
p1=p1->next;
}
return 0;
}
VC 6.0 全代码+效果图
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}Node,*LinkList;
int initHead(LinkList *phead);//创建头节点
int createLink(LinkList *phead);//创建链表
int output(LinkList phead);//
int selecrSort(LinkList phead);
int main()
{
LinkList head;
initHead(&head);
printf("input numbers(0结束):\n");
createLink(&head);
selecrSort(head);
output(head);
return 0;
}
int selecrSort(LinkList phead){
LinkList p1=phead->next;//存在头节点,p1指向第一个
LinkList p2=NULL;//
int temp;//定义临时变量为后面做交换时使用
LinkList pmin=NULL;//定义最小值指针
while(p1->next!=NULL){
p2=p1->next;//从最小
pmin=p2;//
while(p2!=NULL){// 这个循环,p2指针向后找最小的data 并用pmin指向这个最小值的节点
if(p2->data<=pmin->data)
{
pmin=p2;
}
p2=p2->next;
}
if( p1->data >= pmin->data){//比较最小值节与前p1的大小
temp=p1->data;
p1->data=pmin->data;
pmin->data=temp;
}
p1=p1->next;
}
return 0;
}
int initHead(LinkList *phead){
LinkList p=NULL;
p=(LinkList)malloc(sizeof(Node));
p->next=NULL;
*phead=p;
return 0;
}
int createLink(LinkList *phead){
int a;
LinkList p=NULL;
LinkList pre=*phead;
while(1){
scanf("%d",&a);
if(a==0){
return 0;
}
p=(LinkList)malloc(sizeof(Node));
p->next=NULL;
p->data=a;
pre->next=p;
pre=pre->next;
}
return 0;
}
int output(LinkList phead){
LinkList p=phead->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
return 0;
}