• 快速排序(java语言实现)


    package lvyy_test;
    
    import java.util.Arrays;
    import java.util.List;
    
    public class Supai {
    
    	public static void main(String[] args) {
    		// 准备数据
    		List<Integer> nums = Arrays.asList(6, 1, 2, 7, 9, 3, 4, 5, 10, 8);
    		// 设置初始的左侧哨兵,和右侧哨兵
    		int start = 0;
    		int end = nums.size() - 1;
    		// 开始放哨
    		sp(nums, start, end);
    		System.out.println(nums.toString());
    	}
    
    	private static void sp(List<Integer> nums, int start, int end) {
    		// 当左侧哨兵 超过或等于 右侧哨兵 结束本轮放哨(代表无需替换,替换前提应该是大于2个数据条目)
    		while (start >= end) {
    			return;
    		}
    		int i = start;
    		int j = end;
    		int baseIndex = start;
    		// 设置好基数
    		int baseNum = nums.get(start);
    		while (i < j) {
    			// 右侧哨兵在左侧哨兵右侧且右侧哨兵顺序向左检索小于基数位置
    			while (i < j && nums.get(j) >= baseNum)
    				j--;
    			// 右侧哨兵行动完毕后且左侧哨兵仍在右侧哨兵左侧,左侧哨兵向右检索大于基数的位置
    			while (i < j && nums.get(i) <= baseNum)
    				i++;
    			// 当左右两侧都找到时,数据进行互换
    			if (i < j) {
    				exchange(nums, i, j);
    			}
    		}
    		//互换完毕,哨兵位置和基数需要再次进行互换,此操作确定基数位置
    		exchange(nums, baseIndex, j);
    		//基数左侧数据同理
    		sp(nums, start, j - 1);
    		//基数右侧数据同理
    		sp(nums, j + 1, end);
    	}
    
    	private static void exchange(List<Integer> nums, int start, int end) {
    		int x = nums.get(start);
    		int y = nums.get(end);
    		nums.set(start, y);
    		nums.set(end, x);
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
  • 相关阅读:
    将Perl5代码迁移到Perl6上的解决方案
    探索云原生时代:技术驱动的业务架构革新
    好用的ps滤镜插件Portraiture2024
    Spring Boot项目中使用邮件服务
    SQL sever中的触发器
    Java使用JJWT令牌
    海外媒体发稿:如何利用8种出口贸易媒体发稿实现销售突破-华媒舍
    阿里首次开源 Java 10万字八股文,Github仅一天星标就超60K
    Spring 4.x版本新特性
    初识vxlan
  • 原文地址:https://blog.csdn.net/qq_40765784/article/details/126854367