New_Sort_Integer_Sequential解析

news/2025/9/27 23:08:23/文章来源:https://www.cnblogs.com/shoshana-kong/p/19115879
import java.util.ArrayList;
public class New_Sort_Integer_Sequential {
static void sort(ArrayList<Integer> list, Integer left, Integer right) { if (right <= left) return; Integer s = part(list, left, right); sort(list, left, s - 1); sort(list, s + 1, right); }
static Integer part(ArrayList<Integer> list, Integer left, Integer right) { assert(left < right); Integer i = left - 1, j = right; for(;;) { while (compare(list.get(++i), list.get(right))) ; while (compare(list.get(right), list.get(--j))) if (j.equals(left)) break; if (i >= j) break; swap(list, i, j); } swap(list, i, right); return i; }
static boolean compare(Integer x, Integer y) { return x < y; }

static void swap(ArrayList<Integer> list, Integer i, Integer j) { Integer h = list.get(i); list.set(i, list.get(j)); list.set(j, h); }

public static void main(String[] args) { // We test the sorting procedure with a list of random integer objects Integer n = 100000; ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < n; i++) list.add((int) Math.ceil(Math.random() * n)); sort(list, 0, n-1); for (int i = 0; i < n; i++) { System.out.print(list.get(i) + ", "); if(i > 0 && i % 20 == 0) System.out.println(); } }
}

 

 

快速排序核心笔记(Java 实现)

 

🔁 sort 函数:快速排序主逻辑

java
static void sort(ArrayList<Integer> list, Integer left, Integer right) {if (right <= left)return;Integer s = part(list, left, right);sort(list, left, s - 1);sort(list, s + 1, right);
}

✨ 功能说明:

  • list[left..right] 区间进行排序。

  • 使用快速排序(Quicksort)递归地处理左右子区间。

🧠 步骤解析:

  1. 边界检查:如果区间为空或只有一个元素,直接返回。

  2. 分区操作:调用 part 函数,确定基准值位置 s

  3. 递归排序

    • 左半部分:sort(list, left, s - 1)

    • 右半部分:sort(list, s + 1, right)

 

🔍 part 函数:分区核心逻辑

java
static Integer part(ArrayList<Integer> list, Integer left, Integer right) {assert(left < right);Integer i = left - 1, j = right;for (;;) {while (compare(list.get(++i), list.get(right)));while (compare(list.get(right), list.get(--j)))if (j.equals(left))break;if (i >= j)break;swap(list, i, j);}swap(list, i, right);return i;
}

✨ 功能说明:

  • list[right] 为基准值,将区间 [left..right] 分成两部分:

    • 左边:小于基准值

    • 右边:大于等于基准值

  • 返回分区点 i,供 sort 函数递归使用。

🧠 步骤解析:

  1. 初始化指针

    • i = left - 1:从左边界前一个位置开始

    • j = right:从右边界开始

  2. 循环分区

    • 从左向右找第一个 ≥ pivot 的元素

    • 从右向左找第一个 ≤ pivot 的元素

    • 如果 i < j,交换 list[i]list[j]

    • 如果 i ≥ j,结束循环

  3. 放置基准值

    • pivot 放到 i 位置

    • 返回 i 作为分区点

 

⚖️ compare 函数:比较两个整数

java
static boolean compare(Integer x, Integer y) {return x < y;
}

✨ 功能说明:

  • 判断 x 是否小于 y

  • 用于分区逻辑中判断元素是否需要移动。

 

🔄 swap 函数:交换两个元素位置

java
static void swap(ArrayList<Integer> list, Integer i, Integer j) {Integer h = list.get(i);list.set(i, list.get(j));list.set(j, h);
}

✨ 功能说明:

  • 交换列表中第 i 和第 j 个元素。

  • 用于将不在正确位置的元素调换。

 

🧪 main 函数:测试排序效果

java
public static void main(String[] args) {Integer n = 100000;ArrayList<Integer> list = new ArrayList<>();for (int i = 0; i < n; i++)list.add((int) Math.ceil(Math.random() * n));sort(list, 0, n - 1);for (int i = 0; i < n; i++) {System.out.print(list.get(i) + ", ");if (i > 0 && i % 20 == 0)System.out.println();}
}

✨ 功能说明:

  • 创建一个包含 100000 个随机整数的列表。

  • 使用快速排序对整个列表排序。

  • 打印排序后的结果,每 20 个元素换一行。

 

📌 快速排序核心思想总结

  • 分而治之:每次选一个基准值,把列表分成左右两部分。

  • 递归排序:分别对左右部分继续排序。

  • 高效性:平均时间复杂度是 O(n log n),空间复杂度是 O(log n)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

课后2

使用double没得出精准答案第一个由于前面有加号,第一个是字符串,不进行计算,第二个先计算后面是字符串。 import java.util.Random; public class MathProblemGenerator { public static void main(String[] args) …

Java语法基础课程“动手动脑”问题与实验整理

Java语法基础课程“动手动脑”问题与实验整理 一、编程思维与项目分解相关愚公移山故事与编程逻辑关联思考 通过愚公移山故事,清晰感知到编程核心逻辑与现实问题解决的共通性:“虽我之死,有子存焉”对应分支结构(I…

课后感想

系统学习模块分解后,我实现了编程思维的进阶,跳出 “堆砌代码” 的局限,深刻理解其在软件开发中的核心价值。​ 此前写代码常陷入 “一锅粥” 困境:如简单图书管理系统的登录、查询、借阅功能全挤在主程序,新增 “…

php 公司网站百度关键词排名代发

全国PMO专业人士年度盛会 天阳科技集团北京卡洛其项目管理专家李先林先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“应用软件项目管理标准化实践探讨”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1…

交换友情链接平台鞍山做网站优化公司

指针 指针概念 指针保存地址&#xff0c;地址是字节的编号 指针类型和保存的地址类型要一直 使用时注意&#xff0c;把地址转换为&变量的格式来看 int a[3]; a转为&a[0] 指针的大小 64bit 固定8字节&#xff0c; 32bit 固定4字节 指针…

mysql的单表如何仅保留半年的数据

一、问题背景 mysql分表之后,只想保留某张表(例如订单表)最近半年内的数据,然后历史数据放到ES中进行归档,所以要定期处理。像这种的话,要怎么设计呢 二、问题解析 把「近 6 个月留在 MySQL,历史数据归档到 ES …

Java基础核心问题 链接版

"C:\Users\lenovo\Desktop\Java 基础核心问题.docx"

Insightly存储型XSS漏洞分析:通过链接名称注入恶意脚本

本文详细披露了Insightly平台存在的存储型XSS安全漏洞。黑客可通过在链接名称字段注入恶意脚本实现攻击,漏洞涉及脚本标签转义失效问题,影响所有访问受影响页面的用户。文章包含完整的复现步骤、概念验证和漏洞影响分…

建设部政务网站视频拍摄制作合同

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

企业网站公示怎么做做网站前应该先出图

在一个类中如果需要实现多个自定义构造函数,通常做法是在构造函数中实现各自的业务逻辑,如果这些业务逻辑的实现并非截然不同的话,显然不符合oop编程思想,极不利于维护,当然,我们也可以通过将相同的逻辑部分封装成一个方法,但还有一种更为合理简单的方法&#xff0c;下面就通过…

网站开发公司前置审批丽水建设局网站

前言C语言属于高级程序语言的一种&#xff0c;它的前身是“ALGOL”。其创始人是布朗W卡尼汉和丹尼斯M利奇。C语言问世时是带有很大的局限性&#xff0c;因为它只能用于UNIX系统上。然而随着科学技术的进步&#xff0c;计算机工业的发展&#xff0c;C语言逐渐脱离UNIX。1987年美…

江门网站制作公司会计信息网站建设的意思

80端口被其他程序占用&#xff0c; fuser -k -n tcp 80 查看端口是否启用 telnet ip地址 端口没有启动&#xff0c;显示拒绝&#xff1a; 端口启动&#xff0c;显示微笑&#xff1a;

H3C交换机的配置学习-01

1.下载交换机模拟器 [https://www.h3c.com/cn/Service/Document_Software/Software_Download/Other_Product/H3C_Cloud_Lab/Catalog/HCL/] 2.安装后通过模拟器进行创建交换机和主机打开HCL软件,拖一个交换机,一个本地…

nian.so是国外还是国内网站wordpress回复查看插件

http://linuxsogood.org/1121.html/comment-page-1 转载于:https://www.cnblogs.com/saolv/p/7440536.html

网站维护报价表seo推广排名

本改进已集成到 YOLOv8-Magic 框架。 论文地址:https://arxiv.org/abs/2403.19967 论文代码:https://github.com/ma-xu/Rewrite-the-Stars 最近的研究引起了人们对“星形运算”(按元素乘法)在网络设计中未被充分利用的潜力的关注。虽然直观的解释很多,但其应用的基本原理…

找出网站所有死链接阿里企业邮箱免费

放大器DC参数测试(1) Hi,uu们,最近在忙啥呢?想好5.1,端午去哪里玩了吗? 咱们直接开始正题,放大器的DC参数还挺多,在Bench测试中,需要自动化测试,通常需要很多Relay去切换不同的配置去测量不同的参数,在这里瑞萨给出了测试参考电路.如图1所示. 图1:直流关键参数测试电路 Re…

Python脚本生成包含标准的#ifndef保护宏的头文件

做一个python脚本,可以用python + 文件名的形式进行调用 以下是一个可以直接通过命令行调用的 Python 脚本: 方法一:独立脚本文件(推荐) create_header.pypython 复制下载#!/usr/bin/env python3 ""&q…

苗木网站模版网易企业邮箱服务器设置怎么填

目录 复合类型&#xff08;自定义类型&#xff09; 概述&#xff1a; 结构体变量的定义和初始化&#xff1a; 结构体成员的使用&#xff1a; 结构体做函数参数&#xff1a; 结构体值传参&#xff1a; 结构体地址传参&#xff1a; 共用体&#xff08;联合体&#xff09;&…

java实验作业和动手动脑

public class test { public static void main(String[]args){ int X=100; int Y=200; System.out.println("X+Y="+X+Y); System.out.println(X+Y+"=X+Y"); } } 一个是不计算直接转换为字符串,一…