链表排序
来源:互联网 发布:南京java培训学校 编辑:程序博客网 时间:2024/06/07 01:10
//冒泡排序struct node{ int val; node * next; node():next(NULL){}};int main(){ //输入链表的个数,和链表数据,并创建链表 node *head=NULL,*p=NULL; int len; cin>>len; for(int i=0;i<len;i++){ node *new_node=new(node); cin>>new_node->val; if(head==NULL){ head=new_node; p=head; } else{ p->next=new_node; p=p->next; } } //输入的链表 node *x=head; while(x!=NULL){ cout<<x->val; x=x->next; } cout<<endl; //开始冒泡排序 for(int i=0;i<len-1;i++){ //单独判断头节点和它后面一个节点的大小关系 if(head->val>head->next->val){ node * pp=head; head=head->next; pp->next=head->next; head->next=pp; } //记录前一个节点pre,和当前节点p(如果不单独判断头节点,那么pre==p==head,于是在交换节点时候有bug) node *pre=head,*p=head; for(int j=0;j<len-1-i;j++){ if(p->val>p->next->val){ //交换节点 pre->next=p->next; p->next=pre->next->next; pre->next->next=p; } else //没有发生节点交换时,才需要更新p,否则,由于节点交换后p位置后移一位,所以就没有更新的必要了 p=p->next; if(j>0) //更新前节点 pre=pre->next; } //观察排序过程 x=head; while(x!=NULL){ cout<<x->val; x=x->next; } cout<<endl; // } return 0;}
阅读全文
1 0
- 链表排序 归并排序
- 链表排序--选择排序
- 链表排序--快速排序
- 链表排序--归并排序
- 排序3:插入排序(普通插入排序 + 折半插入排序 + 链表插入排序 + 希尔排序)
- LIST排序, Struct排序, qsort排序, STL::LIST sort排序, 链表排序
- 单向链表排序:快速排序和归并排序
- 单向链表排序-归并排序
- 链表排序,使用插入排序,
- 链表排序-直接插入排序
- 链表的一种排序---冒泡排序
- c 链表排序 - 选择排序
- 链表排序之插入排序
- 插入排序进行链表排序
- 优化冒泡排序 & 链表选择排序
- 链表排序之选择排序
- 链表排序之冒泡排序
- 链表排序(归并排序)
- koa2实现mysql数据库分页
- PG的ALTER常用操作
- Qt中操作Excel
- ServerSocket和Socket建立通信(客户端发送消息服务器接收并返回到客户端接收输出)
- Centos 建立本地yum仓库 查看,安装,卸载
- 链表排序
- malooc和new的区别
- Qt导出Excel的简单实现
- hdu2177威佐夫博弈
- ServerSocket和Socket建立通信(服务器和客户端循环接收发送)
- 当git仓库checkout出现文件消失的处理方法
- 单点登录之windows中搭建cas服务器(使用cas-server4.1.3)
- spark入门知识
- html5实现滑块功能之------type="range"属性