这是按照链表插入一个最小元素发展而来的排序,练练手。
#include<iostream> using namespace std; struct node{ int data; node*next; }; node*create(int n){ node*head,*tail,*p; head=tail=new node; head->data=9999999;//安排一个很大的数 //可用浪费一小段空间的方法节省时间。 while(n--){ p=new node; cin>>p->data; p->next=NULL; tail->next=p; tail=p; } return head; } void insertMin(node*head,node*p){ //pp为链表的前节点,qq为链表的后节点 node*pp,*qq; qq=head; pp=head->next; while(pp){ if(pp->data>p->data)break; qq=pp;//后面的节点向前移动 pp=pp->next;//前面的节点向前移动 } //连线插入节点 p->next=pp; qq->next=p; } void insertSort(node*head){ node*p,*q; p=head->next; head->next=NULL; while(p){ q=p->next; p->next=NULL; insertMin(head,p); p=q; } } int main() { //测试数据:12 3 3 66 7 7 0 8 9 88 int n=10; node*p,*head; head=p=create(10); p=p->next;//跳过表头指针 while(p){ cout<<p->data<<" "; p=p->next; } cout<<endl; insertSort(head); //对链表进行直接插入排序: cout<<"排序后:" <<endl; head=head->next; while(head){ cout<<head->data<<" "; head=head->next; } return 0; }