Java数组常用排序算法实例小结

 更新时间:2017年12月21日 08:54:19   作者:xxiaowen  
这篇文章主要介绍了Java数组常用排序算法,结合实例形式总结分析了java数组常用的4种排序算法,包括冒泡排序、数组递增排序、快速排序及选择排序,需要的朋友可以参考下

本文实例讲述了Java数组常用排序算法。分享给大家供大家参考,具体如下:

1、冒泡排序法

SortArray_01.java

public class SortArray_01 {
    public static void main(String args[]) {
        int[] array = { 14, 5, 86, 4, 12, 3, 21, 13, 11, 2, 55, 66, 22 };
        // 创建一个初始化的一维数组array
        System.out.println("未排序的数组:");
        for (int i = 0; i < array.length; i++) {
            // 遍历array数组中的元素
            System.out.print(" " + array[i]);
            // 输出数组元素
            if ((i + 1) % 5 == 0)
                // 每5个元素一行
                System.out.println();
        }
        int mid; // 定义一个中间变量,起到临时存储数据的作用
        for (int i = 0; i < array.length; i++) {
            // 执行冒泡排序法
            for (int j = i; j < array.length; j++) {
                if (array[j] < array[i]) {
                    mid = array[i];
                    array[i] = array[j];
                    array[j] = mid;
                }
            }
        }
        System.out.println("\n使用冒泡法排序后的数组:");
        for (int i = 0; i < array.length; i++) {
            // 遍历排好序的array数组中的元素
            System.out.print(" " + array[i]);
            // 输出数组元素
            if ((i + 1) % 5 == 0)
                System.out.println();
            // 每5个元素一行
        }
    }
}

运行结果:

未排序的数组:
 14 5 86 4 12
 3 21 13 11 2
 55 66 22
使用冒泡法排序后的数组:
 2 3 4 5 11
 12 13 14 21 22
 55 66 86

2、数组递增排序

SortArray_02.java

import java.util.Arrays;
import java.util.Random;
public class SortArray_02 {
    public static void main(String[] args) {
        Random rd = new Random();
        int[] array = new int[15];
        // 声明数组
        System.out.println("没有使用sort方法前的数组:");
        for (int i = 0; i < array.length; i++) {
            // 利用随机数随意产生15个0~20之间的随机数
            array[i] = rd.nextInt(20);
            // 给array数组赋值
            System.out.print(" " + array[i]);
            if ((i + 1) % 5 == 0)
                System.out.println();
        }
        Arrays.sort(array);
        // 对array数组进行升序排序
        System.out.println("\n使用sort方法后的数组:");
        for (int i = 0; i < array.length; i++) {
            // 将array数组中的数据输出
            System.out.print(" " + array[i]);
            if ((i + 1) % 5 == 0)
                System.out.println();
        }
    }
}

运行结果:

没有使用sort方法前的数组:
 13 12 11 18 11
 11 17 13 11 8
 1 0 9 18 3

使用sort方法后的数组:
 0 1 3 8 9
 11 11 11 11 12
 13 13 17 18 18

3、快速排序法

SortArray_03.java

public class SortArray_03 {
    public static void main(String args[]) {
        int[] intArray = { 12, 11, 45, 6, 8, 43, 40, 57, 3, 20, 15, 88, 23 };
        System.out.println("排序前的数组:");
        for (int i = 0; i < intArray.length; i++) {
            System.out.print(" " + intArray[i]);
            // 输出数组元素
            if ((i + 1) % 5 == 0)
                // 每5个元素一行
                System.out.println();
        }
        System.out.println();
        int[] b = quickSort(intArray, 0, intArray.length - 1);
        // 调用quickSort
        System.out.println("使用快迅排序法后的数组:");
        for (int i = 0; i < b.length; i++) {
            System.out.print(" " + b[i]);
            if ((i + 1) % 5 == 0)
                // 每5个元素一行
                System.out.println();
        }
    }
    public static int getMiddle(int[] array, int left, int right) {
        int temp;
        // 进行一趟快速排序,返回中心点位置
        int mid = array[left];
        // 把中心置于a[0]
        while (left < right) {
            while (left < right && array[right] >= mid)
                right--;
            temp = array[right];
            // 将比中心点小的数据移动到左边
            array[right] = array[left];
            array[left] = temp;
            while (left < right && array[left] <= mid)
                left++;
            temp = array[right];
            // 将比中心点大的数据移动到右边
            array[right] = array[left];
            array[left] = temp;
        }
        array[left] = mid;
        // 中心移到正确位置
        return left; // 返回中心点
    }
    public static int[] quickSort(int[] array, int left, int right) {// 快速排序法
        if (left < right - 1) {
            // 如果开始点和结点没有重叠的时候,也就是指针没有执行到结尾
            int mid = getMiddle(array, left, right);
            // 重新获取中间点
            quickSort(array, left, mid - 1);
            quickSort(array, mid + 1, right);
        }
        return array;
    }
}

运行结果:

排序前的数组:
 12 11 45 6 8
 43 40 57 3 20
 15 88 23
使用快迅排序法后的数组:
 3 6 8 11 12
 20 15 23 40 43
 45 88 57

4、选择排序法

SortArray_04.java

public class SortArray_04 {
    public static void main(String args[]) {
        int[] array = { 14, 5, 86, 4, 12, 3, 51, 13, 11, 2, 32, 6, 45, 34 };
        // 创建一个初始化的一维数组array
        int keyValue; // 表示最小的元素值
        int index; // 表示最小的元素值的下标
        int temp; // 中间变量
        System.out.println("未排序的数组:");
        for (int i = 0; i < array.length; i++) {
            // 遍历array数组中的元素
            System.out.print(" " + array[i]);
            // 输出数组元素
            if ((i + 1) % 5 == 0)
                // 每5个元素一行
                System.out.println();
        }
        for (int i = 0; i < array.length; i++) {
            // 使用选择排序法的核心
            index = i;
            keyValue = array[i];
            for (int j = i; j < array.length; j++)
                if (array[j] < keyValue) {
                    index = j;
                    keyValue = array[j];
                }
            temp = array[i];
            array[i] = array[index];
            array[index] = temp;
        }
        System.out.println("\n使用选择排序法后的数组:");
        for (int i = 0; i < array.length; i++) {
            // 遍历排好序的array数组中的元素
            System.out.print(" " + array[i]);
            // 输出数组元素
            if ((i + 1) % 5 == 0)
                System.out.println();
            // 每5个元素一行
        }
    }
}

运行结果:

未排序的数组:
 14 5 86 4 12
 3 51 13 11 2
 32 6 45 34
使用选择排序法后的数组:
 2 3 4 5 6
 11 12 13 14 32
 34 45 51 86

PS:这里再为大家推荐一款关于排序的演示工具供大家参考:

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
http://tools.jb51.net/aideddesign/paixu_ys

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 10分钟带你理解Java中的反射

    10分钟带你理解Java中的反射

    反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这篇文章带大家十分钟快速理解Java中的反射,有需要的可以参考借鉴。
    2016-08-08
  • SpringCloud Gateway中GatewayFilterChain执行流程详解

    SpringCloud Gateway中GatewayFilterChain执行流程详解

    Spring Cloud Gateway旨在为微服务架构提供一种简单有效的、统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,它不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等
    2022-10-10
  • SpringBoot多线程与任务调度总结

    SpringBoot多线程与任务调度总结

    多线程与任务调度是java开发中必须掌握的技能,本文主要介绍了SpringBoot多线程与任务调度总结,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Java中Maven的打包方式和执行jar详解

    Java中Maven的打包方式和执行jar详解

    这篇文章主要介绍了Java中maven的打包方式和执行jar,文中有详细的代码示例,有需要的朋友可以借鉴一下
    2023-04-04
  • java的socket请求和响应方式

    java的socket请求和响应方式

    这篇文章主要介绍了java的socket请求和响应方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 使用SpringBoot AOP 记录操作日志、异常日志的过程

    使用SpringBoot AOP 记录操作日志、异常日志的过程

    这篇文章主要介绍了使用SpringBoot AOP 记录操作日志、异常日志的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决

    IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决

    本文主要介绍了IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”,详细介绍了几种可能会出现的问题及其解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • Java 详解垃圾回收与对象生命周期

    Java 详解垃圾回收与对象生命周期

    这篇文章主要介绍了Java 详解垃圾回收与对象生命周期的相关资料,这里对堆内存与栈内存进行详解及JVM 的生命周期介绍,需要的朋友可以参考下
    2017-01-01
  • Java打印斐波那契前N项的实现示例

    Java打印斐波那契前N项的实现示例

    这篇文章主要介绍了Java打印斐波那契前N项的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • SpringBoot使用hutool操作FTP的详细过程

    SpringBoot使用hutool操作FTP的详细过程

    在使用SpringBoot结合hutool操作FTP时,遇到防火墙导致上传文件大小为0kb的问题,通过设置FTP为被动模式解决,本文详细解析了FTP的主动模式和被动模式的工作原理、安全性及适用场景,帮助理解FTP的连接方式和解决网络限制问题
    2024-09-09

最新评论