对单链表进行选择排序,选择排序算是比较直观的排序算法,利用C语言实现
#include <stdio.h>
struct ListNode{
int val;
struct ListNode *next;
};
struct ListNode *create_list(){
int i;
struct ListNode *head=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *p;
head->next=NULL;
scanf("%d",&i);
while(i!=-1){//输入-1结束
p=(struct ListNode *)malloc(sizeof(struct ListNode));
p->val=i;
p->next=head->next;
head->next=p;
scanf("%d",&i);
}
return head;
}
void print_list(struct ListNode *head){
struct ListNode *p=head->next;
while(p){
printf("%d ",p->val);
p=p->next;
}
printf("\n");
}
void selectSort(struct ListNode *head){
struct ListNode *p,*q,*min;
int temp;
if(head==NULL || head->next==NULL || head->next->next==NULL){
exit(-1);
}
p=head->next;
q=p->next;
min=p;
while(p){
q=p->next;
min=p;
while(q){
if(q->val < min->val){
min=q;
}
q=q->next;
}
temp=p->val;
p->val=min->val;
min->val=temp;
p=p->next;
}
}
int main(){
struct ListNode *head=create_list();
printf("before sort:\n");
print_list(head);
printf("select sorting...\n");
selectSort(head);
printf("output after sort:\n");
print_list(head);
return 0;
}