您的位置:首页 > 其它

[快速排序]148. Sort List

2020-07-02 22:31 78 查看

Sort a linked list in O(n log n) time using constant space complexity.

Example 1:

Input: 4->2->1->3
Output: 1->2->3->4
Example 2:

Input: -1->5->3->4->0
Output: -1->0->3->4->5

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode() {}
*     ListNode(int val) { this.val = val; }
*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode sortList(ListNode head) {
List<Integer> list=new ArrayList<>();
while(head!=null) {
list.add(head.val);
head=head.next;
}
switch(list.size()){
case 0:return null;
case 1:return new ListNode(list.get(0));
default:{
quickSort(0, list.size()-1, list);
ListNode listNode=new ListNode(0);
ListNode cur=listNode;
for(int i=0;i<list.size();i++) {
ListNode list1=new ListNode(list.get(i));
cur.next=list1;
cur=list1;
}
return listNode.next;
}
}
}

void quickSort(int sta,int end,List<Integer> list) {
if(sta>end)return ;
int i=sta,j=end,base=list.get(sta);
while(i<j) {
while(j>i&&list.get(j)>=base)j--;
while(i<j&&list.get(i)<=base)i++;
if(i<j) {
int temp=0;
temp=list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}
list.set(sta, list.get(i));
list.set(i,base);
quickSort(sta, i-1, list);
quickSort(i+1, end, list);
}
}


自己手写快速排序,算是个不错的练习吧,虽然效率不高。。hhh

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: