leecode 归并排序 链表(java)
写了好久,终于写成了.第一次zai leecode错题,题目质量很高,适合面试,与
1.归并排序是稳定的,在java中 Arrays.sort(a);中对于对象的排序就是归并排序。对于原子类型数据使用的是快排。
2.算法复杂度,我们都知道归并排序的最好最坏最差复杂度为nlogn,空间复杂度为n,在链表当中,空间复杂度j降为O(1)。
3.写链表的排序
1.分: 使用书上的快慢指针来获得中间节点,分割成2个链表
2.和: 将两个链表合成一个,比较简单
3.
主程序
ListNode lmerge(ListNode list)
{
if(list==null) return null;//如果是空链表
if(list.next==null) return list;//单个节点
//以下是多节点的情况
1分割 返回中间的地址 middle=split(head)
return (middle,head); 、、 返回连接后的地址
}
package LinkedListSort;
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
} public class LinklistSort { public static ListNode create(int a[])
{
ListNode head=new ListNode(a[0]);
for(int i=1;i<a.length ;i++)
{
ListNode node=new ListNode(a[i]);
node.next=head.next;
head.next=node; }
return head; }
public static void display(ListNode head)
{
ListNode list=head;
while(list!=null)
{ System.out.print(list.val+"--");
list=list.next; }
System.out.println(); } public static ListNode sortList(ListNode head) {
//没有一个节点
if(head==null) return null;
//有一个节点
if(head.next==null) return head;
//有两个以上的节点 ListNode middle=split(head); return merge(sortList(head),sortList(middle)); } private static ListNode merge(ListNode head, ListNode middle) { ListNode p1=head;
ListNode p2=middle;
ListNode h=new ListNode(-1);//一个new头
ListNode tail=h; while(p1!=null&&p2!=null)
{
if(p1.val<=p2.val)
{ tail.next=p1;
tail=tail.next;
p1=p1.next; }
else
{
tail.next=p2;
tail=tail.next; p2=p2.next; } } if(p1!=null)
{
tail.next=p1; }
if(p2!=null)
{
tail.next=p2;
} return h.next ;
}
//分成两部分的部分
private static ListNode split(ListNode head) {
ListNode quick=head;
ListNode slow=head;
ListNode pre=null;
while(quick!=null)
{
pre=slow;
slow=slow.next;
quick=quick.next;
if(quick!=null) quick=quick.next ; }
pre.next =null;
return slow;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={1,3,-5,8,56,44,56};
ListNode list=create(a);
// display(list);
ListNode l=sortList(list); display(l); } }
leecode 归并排序 链表(java)的更多相关文章
- 归并排序算法 java 实现
归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...
- 数据结构——单链表java简易实现
巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成 通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...
- 数组和链表--Java学习笔记(一)
版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 我是一个全职妈妈,两年前在上海一家人力资源 ...
- Java基础(48):归并排序的Java封装含原理,完整可运行,结合VisualGo网站更好理解)
原理: 归并排序建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有序, ...
- 单链表---java实现
单链表优点:1.不需要预先给出元素个数. 2.单链表插入删除时不需要移动数据元素. 单链表缺点:1.每个节点有指针,空间利用率低. 2.单链表不支持随机读取数据. Node.java package ...
- 排序算法入门之归并排序(java实现)
归并排序是采用分治法的典型应用. 参考<数据结构与算法分析-Java语言描述> 归并排序其实要做两件事: (1)"分解"--将序列每次折半划分. (2)"合并 ...
- java数据结构之链表(java核心卷Ⅰ读书笔记)
1.链表 数组和ArrayList的一个重大缺陷就是:从中间位置删除一个元素要付出很大的代价,因为在这个元素删除之后,所有的元素都要向前端移动,在中间的某个位置插入一个元素也是这个原因. (小感悟:s ...
- LeetCode--021--合并两个有序链表(java)
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...
- 单链表Java实现
近期在复习基本数据结构,本文是单链表的Java实现,包含对单链表的实现插入删除查找遍历等.最后还实现了单链表的逆置. 实现了多项式相加,多项式相乘. 原文章及完整源码在这里 http://binhua ...
随机推荐
- Delphi中判断WebBrowser的页面是否加载完成
方法一: 在WebBrowser的OnDocumentComplete事件书写代码. 方法二: WebBrowser1.Navigate(Url); while WebBrowser1.Busy or ...
- SQL注入原理二
随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多. 但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候 ,没有对用户输入数据的合法性进行判断,使应用程序存 ...
- linux点滴:NFS
介绍 NFS,Network File System,网络文件系统.主要功能是通过网络让不同的主机系统间共享资源,类似于windows下的文件共享.适用于互联网中小型企业. 工作原理 客户端发送请求 ...
- 关于vs2013 mysql Ef框架中提示版本不兼容问题的解决办法
<runtime> <assemblyBinding> <dependentAssembly> <assemblyIden ...
- OpenGL列主元矩阵的运算
大学线性代数课本是用的行主元矩阵,OpenGL使用的是列主元矩阵.有什么差别呢,对于线性代数学得不够扎实的孩纸来说,还挺烦的. 其实明白了就觉得很简单: 从课本的角度来看,平移矩阵是诸如这样的: 平移 ...
- spring IOC源码分析(2)
refresh这个方法包含了整个BeanFactory初始化的过程,定位资源由obtainFreshBeanFactory()来完成, protected ConfigurableListableBe ...
- UIExtendedEdge
在IOS7以后 ViewController 开始使用全屏布局的,而且是默认的行为通常涉及到布局.就离不开这个属性 edgesForExtendedLayout,它是一个类型为UIExtendedEd ...
- PIL(Python Image Library)生成验证码
# -*- coding: utf-8 -*-#导入三个模块import Image,ImageDraw,ImageFontimport randomimport math'''基本功能'''#图片宽 ...
- 利用ZABBIX的RPC-JSON作API扩展应用示例
计划将ZABBIX的一些状态可以在另一个应用的显示GRAPH及链接. 故而在网上找了几个文档,作了一个测试. https://www.zabbix.com/documentation/2.4/manu ...
- 【NOIP TG 解方程】
存代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> ...