您的位置:首页 > 其它

单链表的排序

2016-05-06 23:35 302 查看
#include<iostream>
using namespace std;

typedef struct node
{
int data;
struct node *next;
}Node,*List;

List createList()
{
Node *head,*p1,*p2;
p1=p2=head=new Node;

int num;
cin>>num;
while(-1!=num)
{
p1=new Node;
p1->data=num;
p2->next=p1;
p2=p1;
cin>>num;
}
p2->next=NULL;
return head;
}

int getLength(List q)
{
int length=0;
while(NULL!=q->next)
{
length++;
q=q->next;
}
return length;
}

void swap(int &x,int &y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
}

void listSort1(List q)//冒泡排序
{
Node *p;
int n,i,j;
n=getLength(q);
if(NULL==q||NULL==q->next)
{
cout<<"eroor"<<endl;
exit(0);
}
for(j=1;j<n;j++)
{
p=q->next;
for(i=0;i<n-j;i++)
{
if(p->data>p->next->data)
swap(p->data,p->next->data);
p=p->next;
}
}
}

void listSort2(List q)//选择排序
{
int i,j;
Node *p1,*p2,*p3;
int n=getLength(q);
//此处省略了判断,判断见冒泡
for(i=0;i<n-1;i++)
{
p1=p2=p3=q->next;//p2保存最小值地址,p1用来循环,p3用来保存q->next
for(j=i+1;j<n;j++)
{
if(p1->next->data<p1->data)
p2=p1->next;
p1=p1->next;
}
swap(p3->data,p2->data);
}
}

void printList(List q)
{
while(NULL!=q->next)
{
cout<<q->next->data<<endl;
q=q->next;
}
}

int main()
{
List q=createList();
printList(q);

listSort1(q);

//listSort2(q);
return 0;
}
说明:部分代码来自<<程序员面试宝典>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: