首页 > 编程语言 >java算法递归算法之选择排序

java算法递归算法之选择排序

时间:2024-07-31 22:25:07浏览次数:13  
标签:java 递归 基准值 int high 算法 low 数组 array

快速排序的原理就是将数组进行分区,分为三个区,然后如果每个区都是有序数组的话,就已经达成了我们的目标

  1. 小于基准值的数组组成的子数组
  2. 基准值
  3. 大于基准值的数组组成的子数组

因此我们需要重复以上的步骤,分别对1和3也选择基准值进行分区,直到数组中最后只剩0个或者1个,那么就达到目标了,重复进行操作即可

那们我们需要写的代码,首先需要先确定一个基准值,然后把大于基准值和小于基准值的给找出来,进行递归调用。

这边我们选择最左边的数组作为基准值,然后使用单指针的方式来标识基准值所在的位置,然后分别与基准值进行比较,小于基准值的,mark+1,然后参数交换,最后将基准值与mark位置的值进行交换即可

这边盗用一下别人的图,看图会更加的清清晰明了

package com.dlh.test.算法;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class 递归算法之快速排序 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] string = sc.nextLine().split(" ");
        int[] array = new int[string.length];
        for (int i = 0; i < string.length; i++) {
            array[i] = (Integer.parseInt(string[i]));
        }
        quciksort(array,0,array.length -1);
        for (int num:array){
            System.out.print(num + " ");
        }
    }

    private static void quciksort(int[] array, int low, int high) {
        if(low >= high) {
            return;
        }
        //寻找基准点
        int standardindex = findStandard(array,low,high);
        //分别对基准点的左边和右边进行递归调用
        quciksort(array,low,standardindex-1);
        quciksort(array,standardindex+1,high);
    }

    private static int findStandard(int[] array, int low, int high) {
        //选取最左边的为基准点
        int standard = array[low];
        //mark点先从最左边,开始移动,记录最后基准点所在的位置
        int mark = low;
        for (int i = low+1;i <= high;i++){//从基准点右边开始进行循环比较
            if (array[i] < standard){//如果值小于基准点的话,就要放到基准点的左边去,相当于mark的值要右移,
                mark++;
                int temp = array[i];
                array[i] = array[mark];
                array[mark] = temp;
            }
        }
        //将基准点与mark值的位置进行交换
        array[low] = array[mark];
        array[mark] = standard;
        return mark;
    }
}

标签:java,递归,基准值,int,high,算法,low,数组,array
From: https://blog.csdn.net/SmileAssassn/article/details/140782036

相关文章

  • Java入门基础-11面向对象高级(二)
    Java入门基础-11面向对象高级(二)本章知识点总结于黑马程序员的视频课程:《Java入门基础课程》,是对上课做的笔记Java入门基础课程视频地址Java入门基础-10面向对象高级目录Java入门基础-11面向对象高级(二)前言面向对象的三大特征之三:多态认识多态使用多态的好处、类型......
  • JAVA程序设计——二维小游戏制作
    二维小游戏制作一、课题内容和要求1.课题内容:(1)学生需要针对游戏类应用软件(如数独,扫雷,飞机大战,贪食蛇,青蛙过河等,鼓励自己设计开发游戏)的开发,使用互联网信息检索工具,查找和学习游戏类软件开发相关理论,分析和研究开放源代码;选择合适的JAVA开发工具完成软件项目的创建,代码编写......
  • 浅聊java运行机制
    Java程序运行机制首先要清楚运行机制一般有两种解释型编译型解释型:顾名思义,就像有个人在旁边给你解释东西一样。比如看一本英文书,英语老师在旁边一句一句给你翻译解释。在写源代码时,每写一个解释型就会给你翻译一个。如果想要回到之前写的代码,又得重新进行翻译。这样效率......
  • JavaScript(四)——JavaScript 语法
    目录JavaScript语法JavaScript字面量JavaScript变量JavaScript操作符JavaScript语句JavaScript关键字JavaScript注释JavaScript数据类型JavaScript函数JavaScript字母大小写JavaScript字符集驼峰命名法小驼峰命名法大驼峰命名法(帕斯卡命名法)JavaS......
  • *算法训练(leetcode)第三十五天 | 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 I
    刷题记录*121.买卖股票的最佳时机贪心*动态规划122.买卖股票的最佳时机II贪心*动态规划*123.买卖股票的最佳时机III*121.买卖股票的最佳时机leetcode题目地址贪心找左侧最小值、右侧最大值(与最小值求差最大),求差即为最大利润。时间复杂度:......
  • 数组(二)———数组的排序算法①
    目录冒泡排序基本步骤:复杂度分析实现示例(Java):选择排序基本步骤:复杂度分析实现示例(Java):插入排序基本步骤:复杂度分析实现示例(Java):希尔排序基本步骤:复杂度分析实现示例(Java):归并排序基本步骤:复杂度分析实现示例(Java):冒泡排序定义:冒泡排序(BubbleSort)是......
  • 代码随想录算法训练营第55天 | 图论岛屿+水流
    孤岛的总面积https://kamacoder.com/problempage.php?pid=1173代码随想录https://www.programmercarl.com/kamacoder/0102.沉没孤岛.html102.沉没孤岛https://kamacoder.com/problempage.php?pid=1174代码随想录https://www.programmercarl.com/kamacoder/0102.沉没孤岛.......
  • 基于Java+SSM+jsp的医药管理系统的设计与实现(源码+数据库+讲解等)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SSM框架前端框架JSP可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • java异常
    异常1、对异常的理解ThrowableError类:程序运行过程中,非常严重的错误,我们是处理不了的   1.如while(true)死循环会报堆溢出2.栈内存溢出比如说:publicclassTest{publicstaticvoidmain(String[]args){test();}publicstaticvoidt......
  • JavaSE基础 (认识String类)
    一,什么是String类在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了Strin......