排序算法举例

本人面试过京东、阿里、拼多多、字节跳动等一系列大厂,和大家分享一下常见排序算法。

数组快速排序

复制代码
import java.util.Arrays;
import java.util.Random;

public class Solution {
    public static void main(String[] args) {
        // 1.素组快速排序
        int[] arrayA = new int[10];
        // 创建Random对象(用于生成随机数)
        Random random = new Random();
        for (int i = 0; i < 10; i++) {
            arrayA[i] = random.nextInt(10);
            System.out.print(arrayA[i]);
            System.out.print(" ");
        }
        System.out.println();
        Arrays.sort(arrayA);
        for (int i = 0; i < 10; i++) {
            System.out.print(arrayA[i]);
            System.out.print(" ");
        }
    }
}

验证:关键排序方法为Arrays.sort(arrayA);

自定义对象快速排序

关键点,自定义排序方法按照Collections.sort(personList, new Comparator<Person>()定义的内部类规则排序。

复制代码
package com.hmall.user.config;

import lombok.Data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Solution {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<>();
        Person person1 = new Person();
        person1.setAge(10);
        person1.setHeight(198);
        person1.setName("阿里");

        Person person2 = new Person();
        person2.setAge(11);
        person2.setHeight(189);
        person2.setName("腾讯");

        Person person3 = new Person();
        person3.setAge(12);
        person3.setHeight(180);
        person3.setName("字节");

        Person person4 = new Person();
        person4.setAge(12);
        person4.setHeight(181);
        person4.setName("字节");

        personList.add(person1);
        personList.add(person2);
        personList.add(person3);

        // 1.按照年龄从大到小排序,按照身高从高到小排序
        Collections.sort(personList, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                if (o1.getAge() != o2.getAge()) {
                    return o2.getAge() - o1.getAge();
                } else {
                    return o2.getHeight() - o1.getHeight();
                }
            }
        });
    }
}

@Data
class Person {
    private int age;
    private int height;
    private String name;
}

验证;

字典排序

  • compare(o1, o2)返回值:负数 →o1 在前,零 →位置不变,正数→o1 在后;

  • 代码中o1.compareTo(o2)是 Java 默认的字典序比较,基于字符的 Unicode 编码值;

  • 最终排序结果是按字典序升序排列:数字(编码小)→小写字母(编码大),同类型字符按 a-z 顺序。

    package com.hmall.user.config;

    import java.util.*;

    public class Solution {
    public static void main(String[] args) {
    List arrayA = new ArrayList<>();
    arrayA.add("ertyuy");
    arrayA.add("iooik");
    arrayA.add("1");
    System.out.println(arrayA);
    Collections.sort(arrayA, new Comparator() {
    @Override
    public int compare(String o1, String o2) {
    return o1.compareTo(o2);
    }
    });
    System.out.println(arrayA);
    }
    }

验证:

相关推荐
不会就选b3 小时前
算法日常・每日刷题--<贪心>25
数据结构·算法
杨杨杨大侠3 小时前
Jev、Kev、Laya:决策模型怎么选,什么时候需要微调?
人工智能·python·agent
andyweike3 小时前
php笔记
开发语言·笔记·php
EatFan3 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
LOVE️YOU4 小时前
Python 在定义函数时,究竟定义的是什么?
python
Maiko Star4 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
段一凡-华北理工大学4 小时前
大模型应用开发 100 天:Python + LLM 从入门到精通 day26~Prompt 调试与优化——A/B 测试与效果评估
windows·python·大模型·prompt·智能体·提示词工程·高炉智能化
Minecraft红客4 小时前
以撒的结合
python·游戏·电脑·娱乐
Circ.4 小时前
Python 调试 Litellm 本地大模型接口:模型列表与对话接口实操踩坑记录
开发语言·python
风早爽太5 小时前
用 ‌Render‌ 快速部署网站和常见问题解决
python·fastapi