用c简单实现了一下链表的选择排序~
#include<stdio.h>
#include<malloc.h>
typedef struct list{
int data;
list* next;
}*listd;
void pr(listd head){ //选择排序
listd q,p,r;
int s;
for(p=head->next;p!=NULL;p=p->next){
r=p;
for(q=p->next;q!=NULL;q=q->next){
if(q->data<r->data){ //一一比较,r存最小值的结点指针,最后进行数据互换
r=q;
}
}
if(r->data!=p->data){
s=r->data;
r->data=p->data;
p->data=s;
}
}
}
int main(){
// printf("nd");
listd h,a,b,c;
h=(listd)malloc(sizeof(list));
b=(listd)malloc(sizeof(list));
a=(listd)malloc(sizeof(list));
c=(listd)malloc(sizeof(list));
a->data=3;
b->data=2;
c->data=1;
h->next=a;
a->next=b;
b->next=c;
c->next=NULL;
pr(h);
for(listd p=h->next;p!=NULL;p=p->next){
printf("%d\t",p->data);
}
return 0;
}
选择排序呢其实和冒泡排序有着差不多的思想,都是每一趟定好一个位置,一个一个的冒头,估计他和冒泡排序唯一的不同就是冒牌排序需要多次交换,而选择排序每次只需要交换一次就可以了,思想就是在未拍好的序列中找一个最小的或最大的依次放到已排好序列的末端。