热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java排序算法详解:选择排序、插入排序、冒泡排序与递归实现

本文详细解析了Java中的几种基础排序算法,包括选择排序、插入排序和冒泡排序,并探讨了递归在这些算法中的应用。选择排序通过每次找到未排序部分的最小值并将其置于已排序部分的末尾来实现;插入排序则通过逐步将每个元素插入到已排序序列的正确位置;而冒泡排序则是通过多次遍历数组,两两比较并交换相邻的元素,最终使较大的元素逐渐“冒”到数组末尾。文章还提供了具体的代码示例,帮助读者更好地理解和掌握这些算法的实现细节。
java排序(选择排序+插入排序+冒泡排序+递归)



java排序(选择排序+插入排序+冒泡排序+递归)


java排序(选择排序+插入排序+冒泡排序+递归)
D:递归
java排序(选择排序+插入排序+冒泡排序+递归)
java排序(选择排序+插入排序+冒泡排序+递归)
----------------------------

代码演示:
package day06;
/**
 * 选择排序
 * 每次找出一个最小的值,放到最前面
 * @author yw.wang
 *
 */
public class Test12 {
public static void main(String[] args) {
    Test12 t12 = new Test12();
    t12.xz();            //选择排序
    t12.cr();            //插入排序
    t12.mp();            //冒泡排序
    t12.dg(4);            // 递归
    System.out.println(    t12.dg(4));
}
//选择排序,每次找出最小的值,放在最前面
public void xz(){
    int x[] = {12,9,45,2,13,27,48,79,56,38};//对这一行数进行从小到大的排序
    int min =0,t=0;//min代表最小的值,t表示最小的值的下标
    for(int i=0;ilength;i++)    //遍历x数组
    {
        min =x[i];        //认为第一个值是最小值
        t=i;
        for(int j=i+1;jlength;j++){
            if(min>x[j]){
                min = x[j];
                t=j;        //这样可以找出这一行最小的值
            }
        }
        x[t]=x[i];
        x[i]=min;        //这样可以把每次找出来的值赋值给第一个
    }
    for (int i = 0; i < x.length; i++) {
        System.out.print(x[i]+"  ");
    }
}
//-------------------------------------------
//插入排序
public void cr(){
    int [] x = {12,9,45,2,13,27,48,79,56,38};
    
    for(int i=1;ilength;i++){    //下标从1开始,默认不动第一个数,拿出第二个开始比较
        int k =x[i];//要插入的数
        int j=i-1;//记住位移之后的位置
        //判断,如果当前的值大于插入的数,进行位移
        while(j>=0&&x[j]>k){
            x[j+1]=x[j];
            j--;
        }
        x[j+1]=k;
    }
    for (int i = 0; i < x.length; i++) {
        System.out.print(x[i]+"    ");
    }
    System.out.println();
}
//---------------------------------------
//冒泡排序
public void mp(){
    int x []={12,9,45,2,13,27,48,79,56,38};
    int t =0;
    for(int j=x.length-1;j>=0;j--){
        for(int i=0;i
            if(x[i] > x[i+1]){
                t=x[i];
                x[i]=x[i+1];
                x[i+1]=t;
            }
        }
    }
    for (int i = 0; i < x.length; i++) {
        System.out.print(x[i]+"   ");
    }
    
}
//-------------------------------
//递归
public int dg(int n){
    if(n ==0){
        return 1;
    }else{
        return n*dg(n-1);//4*dg(3)    4!=4*3!
    }
}
}






来自为知笔记(Wiz)



推荐阅读
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 本文详细介绍了267 Collections的特性和应用场景。作为Java集合框架中的核心接口,Collection接口是所有单列集合类的顶级接口,涵盖了列表、集合和队列等数据结构。通过具体的应用实例,本文深入解析了Collection接口的各种方法和功能,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • Java学习第10天:深入理解Map接口及其应用 ... [详细]
  • 深入理解排序算法:集合 1(编程语言中的高效排序工具) ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 枚举类中enum关键字的常见应用与实践
    在枚举类中,`enum`关键字具有重要的作用,本文探讨了其常见的应用场景与实践。特别指出,枚举对象必须置于枚举类的首行,否则将导致编译错误。通过具体的代码示例,详细解析了这一规则及其背后的原理,帮助开发者更好地理解和使用枚举类。 ... [详细]
  • 在探讨P1923问题时,我们发现手写的快速排序在最后两个测试用例中出现了超时现象,这在意料之中,因为该题目实际上要求的是时间复杂度为O(n)的算法。进一步研究题解后,发现有选手使用STL中的`nth_element`函数成功通过了所有测试点。本文将详细分析这一现象,并提出相应的优化策略。 ... [详细]
  • 在本节课程中,我们将深入探讨 JSP 编程中的实际案例,通过具体代码示例 `code316.java` 来解析数据库连接的实现。该示例展示了如何使用 Java 的 JDBC API 进行数据库操作,包括加载数据库驱动、建立连接等关键步骤。通过本课程的学习,读者将能够更好地理解和应用 JSP 中的数据库连接技术。 ... [详细]
  • 本文深入探讨了C#中的反射与特性功能。首先,介绍了反射的基本概念,即通过元数据(包括类的方法、属性和字段等)在运行时动态获取和操作程序信息的能力。此外,还详细解析了特性的使用方法及其在代码注解和元数据扩展中的重要作用,为开发者提供了丰富的编程技巧和实践指导。 ... [详细]
  • 每年,意甲、德甲、英超和西甲等各大足球联赛的赛程表都是球迷们关注的焦点。本文通过 Python 编程实现了一种生成赛程表的方法,该方法基于蛇形环算法。具体而言,将所有球队排列成两列的环形结构,左侧球队对阵右侧球队,首支队伍固定不动,其余队伍按顺时针方向循环移动,从而确保每场比赛不重复。此算法不仅高效,而且易于实现,为赛程安排提供了可靠的解决方案。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 在Java编程中,`AbstractClassTest.java` 文件详细解析了抽象类的使用方法。该文件通过导入 `java.util.*` 包中的 `Date` 和 `GregorianCalendar` 类,展示了如何在主方法 `main` 中实例化和操作抽象类。此外,还介绍了抽象类的基本概念及其在实际开发中的应用场景,帮助开发者更好地理解和运用抽象类的特性。 ... [详细]
author-avatar
iwasafool
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有