首页 > 编程语言 >力扣-排序算法

力扣-排序算法

时间:2022-10-14 20:33:24浏览次数:51  
标签:head right ListNode nums int 力扣 算法 排序 left

部分题解保存

排序数组-快速排序

class Solution {
    private final static Random random = new Random(System.currentTimeMillis());

    public int[] sortArray(int[] nums) {
        //20221015再回顾
        quickSort(nums,0,nums.length-1);
        return nums;
    }
    public void quickSort(int[] nums,int left,int right){
        if(left>=right) return;
        int pivotIndex = partition(nums,left,right);
        quickSort(nums,left,pivotIndex-1);
        quickSort(nums,pivotIndex+1,right);
    }
    private int partition(int[] nums, int left,int right){
        int randomIndex = left+random.nextInt(right-left+1);
        swap(nums,left,randomIndex);
        int pivot = nums[left];
        int j = left;
        // 1 2 0 4 3
        // j i       ri
        for (int i = left+1; i <= right; i++) {
            if (nums[i]<=pivot){
                // 1 2 0 4 3
                // j   i
                j++;
                // 1 2 0 4 3
                //   j i
                swap(nums,i,j);
                // 1 0 2 4 3
                //   j i
            }
        }
        // 1 0 2 4 3
        //   j       i
        //目前就是j在比pivot小的最后一个元素的位置,但是毕竟不是pivot所以要交换
        swap(nums,left,j);
        // 0 1 2 4 3
        //   j       i
        return j;//返回的就是pivotIndex左边的比nums[j]小
    }
    private void swap(int[] nums,int i,int j){
        int t = nums[i];
        nums[i] = nums[j];
        nums[j]=t;
    }
}

148-链表排序-归并算法

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
示例 1:
输入:head = [4,2,1,3]
输出:[1,2,3,4]

示例 2:
输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]
示例 3:

输入:head = []
输出:[]
提示:

链表中节点的数目在范围 [0, 5 * 104] 内
-105 <= Node.val <= 105
进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?


class Solution {
    public ListNode sortList(ListNode head) {
        if (head == null || head.next == null) return head;
        ListNode fast = head;
        ListNode slow = head;
        while(fast.next!=null&&fast.next.next!=null){
            fast = fast.next.next;
            slow = slow.next;
        }
        ListNode tmp = slow.next;
        slow.next = null;//断开这个链表
        ListNode left = sortList(head);//left这里会直接把整个左边的都看作是left开头的链表
        ListNode right = sortList(tmp);//right是把整个右边作为链表
        //下面是合并也就是left和right都是只有一个元素了。
        ListNode h = new ListNode(0);
        ListNode res = h;
        while(left!=null && right != null){
            if (left.val<right.val) {
                h.next =left;
                left = left.next;//left就指向了null
            }else {
                h.next =right;
                right = right.next;//right就指向了null
            }
            h=h.next;
        }
        h.next = left!=null ? left:right;
        return res.next;
    }
}

标签:head,right,ListNode,nums,int,力扣,算法,排序,left
From: https://www.cnblogs.com/indullged/p/16792921.html

相关文章

  • InnoDB存储引擎:索引与算法
    InnoDB存储引擎索引概述InnoDB支持以下几种常见的索引:B+树索引(传统意义上的索引,这是目前关系型数据库系统中查找最为常用和最为有效的索引;B+树索引并不能找到一个给......
  • 算法第四版习题解答(1.1 Basic Programming Model)
    前言使用的是《算法》第四版英文版,主要是习题解答。书中jar包的导入请戳:算法(第四版)中algs4.jar下载和使用EXERCISES1.1.11.1.21.1.3importjava.util.Scanner;p......
  • Python实战—基于KNN算法尾鸢花数据集分类
    KNN模型理论K最近邻分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中......
  • 1.0 Mysql索引的数据结构与算法
    索引是高效获取排序好的数据结构索引本身就是数据一部分关键信息,通过索引大大减少索引的数据量。索引信息需要额外的空间存储。创建和维护索引本身也会降低对数据的操作......
  • 深度学习算法工程师内心感悟
    某网友:数据放在第一位,成也数据,败也数据。深刻认识数据的重要性,把数据集维护好,数据量够了,再谈后面的模型优化,数据都不干净,用再好的模型,也不会出好的结果。启动开发前,多问......
  • 3、插入排序-Go语言版
    前情提示Go语言学习者,文章若有不妥之处,感谢指正。本文参考:https://www.runoob.com/w3cnote/ten-sorting-algorithm.html为了便于下载和整理,已开源放在:https://github......
  • 蓝桥杯省赛 研究生组 双向排序
    过60%数据#include<iostream>usingnamespacestd;voidquick_sort_down(intq[],intl,intr){if(l>=r){return;}inti=l-1,j=r......
  • Python人工智能经典算法之线性回归
    1.9k近邻算法总结[**]优点:1.简单有效2.重新训练代价底3.适合类域交叉样本4.适合大样本自动分类缺点:1.惰性学习2......
  • 递归算法
    定义:函数中可调用其他函数,递归特指函数中调用自身注意点:需定义终止条件(if(...)调用自身),否则会无休止下去题型:汉诺塔、求阶乘(也可用循环)汉诺塔问题:#include<stdi......
  • AcWing 算法提高课 博弈论
    1、SG函数SG函数的定义:可以到达的全部点的SG函数中没有出现的最小自然数可以解决棋子移动的博弈论问题推导方式基于nim游戏,https://www.acwing.com/solution/content/1......