快速排序的实现

先写代码,一会再总结

public class TestQuickSort {

public static void main(String[] args) {
int[] array = {6, 4, 5, 2, 3, 1};
for (int x : array) {
System.out.print(x + " ");
}

System.out.println();
quickSort(array, 0, array.length - 1);

for (int x : array) {
System.out.print(x + " ");
}
}

// 对分割元素左右段数组进行递归快排,直到左右数组只剩下1个元素为止,left代表数组的起始坐标,right代表数组的终点坐标
public static void quickSort(Comparable[] array, int left, int right) {
// 当left==right时,说明左边或右边的数组只剩下1个元素,跳出快排
if (left < right) {
int i = findPartition(array, left, right);
quickSort(array, left, i - 1);
quickSort(array, i + 1, right);
}
}

// 寻找并返回分割元素坐标
public static int findPartition(Comparable[] array, int left, int right) {
int i = left;
int j = right;

// 用数组第一个元素做为分割元素
Comparable partitionElement = array[left];
Comparable temp;

while (i < j) {

// 从右向左搜索第一个小于分割元素的元素,找到后交换两者的位置
// 容易知道j左移的时候 array[i]就是分割元素,同理 i 右移的时候,array[j]就是分割元素
while (i < j && array[j].compareTo(partitionElement >= 0) {
j--;
}

if (i < j) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}

// 从左向右搜索第一个大于分割元素的元素,找到后交换两者的位置
while (i < j && array[i].comparaTo(partitionElement <= 0) {
i++;
}

if (i < j) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}


总结出的几个问题:
1.快排有两种实现方法:
(1)第一种如我的代码所示,从右向左找(从右想做找)的跳出条件为(i < j),并且在找到元素后立即与分割元素交换位置.看这一步
//  从右向左搜索第一个小于分割元素的元素,找到后交换两者的位置
while (i < j && array[j].compareTo(partitionElement >= 0) {
j--;
}

if (i < j) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}


(2)第二种是从右向左找(从右想做找)的跳出条件为(i < right) right为数组边界,并且找到元素后不和分割元素交换值,而是交换左右两个找到的值.具体实现略过

2.我这种方法只能先从右往左找第一个小于分割元素的元素
不能先从左往右找第一个大于分割元素的元素
内容概要:本文详细介绍了名为MoSca的系统,该系统旨在从单目随意拍摄的视频中重建和合成动态场景的新视角。MoSca通过4D Motion Scaffolds(运动支架)将视频数据转化为紧凑平滑编码的Motion Scaffold表示,并将场景几何和外观与变形场解耦,通过高斯融合进行优化。系统还解决了相机焦距和姿态的问题,无需额外的姿态估计工具。文章不仅提供了系统的理论背景,还给出了基于PyTorch的简化实现代码,涵盖MotionScaffold、GaussianFusion、MoScaSystem等核心组件。此外,文中深入探讨了ARAP变形模型、2D先验到3D的提升、动态高斯表示、相机参数估计等关键技术,并提出了完整的训练流程和性能优化技巧。 适用人群:具备一定计算机视觉和深度学习基础的研究人员和工程师,特别是对动态场景重建和新视角合成感兴趣的从业者。 使用场景及目标:①从单目视频中重建动态场景的新视角;②研究和实现基于4D Motion Scaffolds的动态场景表示方法;③探索如何利用预训练视觉模型的先验知识提升3D重建质量;④开发高效的动态场景渲染和优化算法。 其他说明:本文提供了详细的代码实现,包括简化版和深入扩展的技术细节。阅读者可以通过代码实践加深对MoSca系统的理解,并根据具体应用场景调整和扩展各个模块。此外,文中还强调了物理启发的正则化项和多模态先验融合的重要性,帮助实现更合理的变形和更高质量的渲染效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值