
蓝桥杯2013Java题5(三部排序)
发布日期:2021-05-11 00:19:44
浏览次数:26
分类:精选文章
本文共 786 字,大约阅读时间需要 2 分钟。
5.标题:三部排序
传统排序算法如快速排序、希尔排序等确实高效,但在实际应用中,常常需要个性化处理。对于整型数组的特殊排序任务,这里提出了一种高效方案。任务目标是将数组划分为三个区域:负数全部位于左端,零集中在中间,正数则占据右区。值得注意的是,负数区域和正数区域的内部不需要有序。通过线性扫描即可完成整次任务的处理。 这种方法基于以下算法思路:选择一个初始扫描指针p,从数组开始位置开始工作。同时维护两个指针left和right,分别指向当前已知位置的左右边界。执行三步操作:一是让p从0逐步扩展工作范围;二是遇到负数时与left指针对应的元素交换位置并两边都向右推进;三是遇到正数时与right指针对应的元素交换位置并两边都向左缩短。特殊情况即为遇到零时,无需任何交换,仅让p前进。 以下是具体实现代码: static void sort(int[] x) { int p = 0; int left = 0; int right = x.length - 1; while (p <= right) { if (x[p] < 0) { int t = x[left]; x[left] = x[p]; x[p] = t; left++; p++; } else if (x[p] > 0) { int t = x[right]; x[right] = x[p]; x[p] = t; right--; } // 当x[p] == 0时,无需处理,仅p递进 else { p++; } } } 建议填写 在else语句处。完成后,数组即可按负、零、正三区排序。如给定数组:25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0,排序结果应为:-3,-2,-16,-5,0,0,0,21,19,33,25,16,18,25。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月11日 21时34分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
HttpServletResponse-完成文件下载
2019-03-15
什么题目的暂时还没想好
2019-03-15
Python中pip安装模块太慢
2019-03-15
docker安装
2019-03-15
N皇后问题解法(递归+回朔)
2019-03-15
面试题 08.01. 三步问题
2019-03-15
剑指 Offer 11. 旋转数组的最小数字
2019-03-15
word文档注入(追踪word文档)未完
2019-03-15
作为我的第一篇csdn博客吧
2019-03-15
ajax异步提交失败
2019-03-15
一道简单的访问越界、栈溢出pwn解题记录
2019-03-15
ubuntu18.04.4版本安装docker教程
2019-03-15
Stream 某些API
2019-03-15
关于项目中 对Java 的为空判断整理
2019-03-15
测试调用另一台电脑ip是否有用
2019-03-15
mos-excel集成文档
2019-03-15
chat 快问!
2019-03-15
3.jdk的环境配置
2019-03-15
2.连接池
2019-03-15