单链表的排序
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; }说明:部分代码来自<<程序员面试宝典>>
相关文章推荐
- Nginx编译链接安装详细步骤
- Xamarin.Forms之库不兼容现象记录
- 010Regular Expression Matching
- 判断单链表中有没有环
- 条件选择语句 if
- 信号
- 动态规划——problem f
- 最小的K个数
- Android View绘制13问13答
- 关于在C#对类的属性理解
- JAVA多线程总结
- JAVA学习-类和对象
- Apache中禁止显示目录文件列表
- 通用系列 —— 快速搭建设置界面
- JAVAC不是内部解决方法
- 安卓data./data没数据的时候
- 使用 MailOtto 做完美预加载
- 字符替换问题
- (转)Android 内存泄漏案例和解析
- Android中的Binder(二)