广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >java是算法吗?
  • 896
分享到

java是算法吗?

java教程java算法 2019-06-14 17:06:47 896人浏览 绘本
摘要

java不是算法。Java是一门面向对象编程语言,是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级WEB应用开发和移动应用开发。算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题

java不是算法。

Java是一门面向对象编程语言,是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级WEB应用开发和移动应用开发。

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

我们可以使用java语言来实现不同的算法。

Java的几种常见排序算法

冒泡排序

1.gif

a、冒泡排序,是通过每一次遍历获取最大/最小值

b、将最大值/最小值放在尾部/头部

c、然后除开最大值/最小值,剩下的数据在进行遍历获取最大/最小值

d、代码实现

public static void main(String[] args) {

        int arr[] = {8, 5, 3, 2, 4};

        //冒泡
        for (int i = 0; i < arr.length; i++) {
            //外层循环,遍历次数
            for (int j = 0; j < arr.length - i - 1; j++) {
                //内层循环,升序(如果前一个值比后一个值大,则交换)
                //内层循环一次,获取一个最大值
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

e、排序过程(红色:移动的数据)

5,3,2,4,8

3,2,4,5,8

2,3,4,5,8

2,3,4,5,8

2,3,4,5,8

选择排序

2.gif

a、将第一个值看成最小值

b、然后和后续的比较找出最小值和下标

c、交换本次遍历的起始值和最小值

d、说明:每次遍历的时候,将前面找出的最小值,看成一个有序的列表,后面的看成无序的列表,然后每次遍历无序列表找出最小值。

e、代码实现

public static void main(String[] args) {

        int arr[] = {6, 5, 3, 2, 4};

        //选择
        for (int i = 0; i < arr.length; i++) {
            //默认第一个是最小的。
            int min = arr[i];
            //记录最小的下标
            int index = i;
            //通过与后面的数据进行比较得出,最小值和下标
            for (int j = i + 1; j < arr.length; j++) {
                if (min > arr[j]) {
                    min = arr[j];
                    index = j;
                }
            }
            //然后将最小值与本次循环的,开始值交换
            int temp = arr[i];
            arr[i] = min;
            arr[index] = temp;
            //说明:将i前面的数据看成一个排好的队列,i后面的看成一个无序队列。每次只需要找无需的最小值,做替换
        }
    }

f、排序过程(红色:移动的数据)

2,5,3,6,4

2,3,5,6,4

2,3,4,6,5

2,3,4,5,6

2,3,4,5,6

插入排序

3.gif

a、默认从第二个数据开始比较。

b、如果第二个数据比第一个小,则交换。然后在用第三个数据比较,如果比前面小,则插入(狡猾)。否则,退出循环

c、说明:默认将第一数据看成有序列表,后面无序的列表循环每一个数据,如果比前面的数据小则插入(交换)。否则退出。

d、代码实现

public static void main(String[] args) {

        int arr[] = {7, 5, 3, 2, 4};

        //插入排序
        for (int i = 1; i < arr.length; i++) {
            //外层循环,从第二个开始比较
            for (int j = i; j > 0; j--) {
                //内存循环,与前面排好序的数据比较,如果后面的数据小于前面的则交换
                if (arr[j] < arr[j - 1]) {
                    int temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                } else {
                    //如果不小于,说明插入完毕,退出内层循环
                    break;
                }
            }
        }
    }

e、排序过程(红色:有序,黑色:无序)

5,7,3,2,4

3,5,7,2,4

2,3,5,7,4

2,3,4,5,7

希尔排序(插入排序变种版)

4.gif

a、基本上和插入排序一样的道理

b、不一样的地方在于,每次循环的步长,通过减半的方式来实现

c、说明:基本原理和插入排序类似,不一样的地方在于。通过间隔多个数据来进行插入排序。

d、代码实现

public static void main(String[] args) {

        int arr[] = {7, 5, 3, 2, 4};

        //希尔排序(插入排序变种版)
        for (int i = arr.length / 2; i > 0; i /= 2) {
            //i层循环控制步长
            for (int j = i; j < arr.length; j++) {
                //j控制无序端的起始位置
                for (int k = j; k > 0  && k - i >= 0; k -= i) {
                    if (arr[k] < arr[k - i]) {
                        int temp = arr[k - i];
                        arr[k - i] = arr[k];
                        arr[k] = temp;
                    } else {
                        break;
                    }
                }
            }
            //j,k为插入排序,不过步长为i
        }
    }

e、排序过程(步长4/2/1)

4,1,3,2,6,5,8,9,7

3,1,4,2,6,5,7,9,8

1,2,3,4,5,6,7,8,9

快速排序

5.gif

a、确认列表第一个数据为中间值,第一个值看成空缺(低指针空缺)。

b、然后在剩下的队列中,看成有左右两个指针(高低)。

c、开始高指针向左移动,如果遇到小于中间值的数据,则将这个数据赋值到低指针空缺,并且将高指针的数据看成空缺值(高指针空缺)。然后先向右移动一下低指针,并且切换低指针移动。

d、当低指针移动到大于中间值的时候,赋值到高指针空缺的地方。然后先高指针向左移动,并且切换高指针移动。重复c、d操作。

e、直到高指针和低指针相等时退出,并且将中间值赋值给对应指针位置。

f、然后将中间值的左右两边看成行的列表,进行快速排序操作。

g、代码实现

public static void main(String[] args) {

        int arr[] = {7, 5, 3, 2, 4, 1, 8, 9, 6};

        //快速排序
        int low = 0;
        int high = arr.length - 1;
        quickSort(arr, low, high);  
    }

    public static void quickSort(int[] arr, int low, int high) {
        //如果指针在同一位置(只有一个数据时),退出
        if (high - low < 1) {
            return;
        }
        //标记,从高指针开始,还是低指针(默认高指针)
        boolean flag = true;
        //记录指针的其实位置
        int start = low;
        int end = high;
        //默认中间值为低指针的第一个值
        int midValue = arr[low];
        while (true) {
            //高指针移动
            if (flag) {
                //如果列表右方的数据大于中间值,则向左移动
                if (arr[high] > midValue) {
                    high--;
                } else if (arr[high] < midValue) {
                    //如果小于,则覆盖最开始的低指针值,并且移动低指针,标志位改成从低指针开始移动
                    arr[low] = arr[high];
                    low++;
                    flag = false;
                }
            } else {
                //如果低指针数据小于中间值,则低指针向右移动
                if (arr[low] < midValue) {
                    low++;
                } else if (arr[low] > midValue) {
                    //如果低指针的值大于中间值,则覆盖高指针停留时的数据,并向左移动高指针。切换为高指针移动
                    arr[high] = arr[low];
                    high--;
                    flag = true;
                }
            }
            //当两个指针的位置相同时,则找到了中间值的位置,并退出循环
            if (low == high) {
                arr[low] = midValue;
                break;
            }
        }
        //然后出现有,中间值左边的小于中间值。右边的大于中间值。
        //然后在对左右两边的列表在进行快速排序
        quickSort(arr, start, low -1);
        quickSort(arr, low + 1, end);
    }

h、排序过程

6,5,3,2,4,1,7,9,8

1,5,3,2,4,6,7,9,8

1,5,3,2,4,6,7,9,8

1,4,3,2,5,6,7,9,8

1,2,3,4,5,6,7,9,8

1,2,3,4,5,6,7,9,8

1,2,3,4,5,6,7,8,9

归并排序

6.gif

a、将列表按照对等的方式进行拆分

b、拆分小最小快的时候,在将最小块按照原来的拆分,进行合并

c、合并的时候,通过左右两块的左边开始比较大小。小的数据放入新的块中

d、说明:简单一点就是先对半拆成最小单位,然后将两半数据合并成一个有序的列表。

e、代码实现

public static void main(String[] args) {

        int arr[] = {7, 5, 3, 2, 4, 1,6};

        //归并排序
        int start = 0;
        int end = arr.length - 1;
        mergeSort(arr, start, end);
    }

    public static void mergeSort(int[] arr, int start, int end) {
        //判断拆分的不为最小单位
        if (end - start > 0) {
            //再一次拆分,知道拆成一个一个的数据
            mergeSort(arr, start, (start + end) / 2);
            mergeSort(arr, (start + end) / 2 + 1, end);
            //记录开始/结束位置
            int left = start;
            int right = (start + end) / 2 + 1;
            //记录每个小单位的排序结果
            int index = 0;
            int[] result = new int[end - start + 1];
            //如果查分后的两块数据,都还存在
            while (left <= (start + end) / 2 && right <= end) {
                //比较两块数据的大小,然后赋值,并且移动下标
                if (arr[left] <= arr[right]) {
                    result[index] = arr[left];
                    left++;
                } else {
                    result[index] = arr[right];
                    right++;
                }
                //移动单位记录的下标
                index++;
            }
            //当某一块数据不存在了时
            while (left <= (start + end) / 2 || right <= end) {
                //直接赋值到记录下标
                if (left <= (start + end) / 2) {
                    result[index] = arr[left];
                    left++;
                } else {
                    result[index] = arr[right];
                    right++;
                }
                index++;
            }
            //最后将新的数据赋值给原来的列表,并且是对应分块后的下标。
            for (int i = start; i <= end; i++) {
                arr[i] = result[i - start];
            }
        }
    }

f、排序过程

5,7,3,2,4,1,6

5,7,2,3,4,1,6

2,3,5,7,4,1,6

2,3,5,7,1,4,6

2,3,5,7,1,4,6

1,2,3,4,5,6,7

推荐教程:Java教程

--结束END--

本文标题: java是算法吗?

本文链接: https://www.lsjlt.com/news/4328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java是算法吗?
    java不是算法。Java是一门面向对象编程语言,是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题...
    99+
    2019-06-14
    java教程 java 算法
  • javascript算是java吗
    这篇文章将为大家详细讲解有关javascript算是java吗,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 javascript不算java...
    99+
    2022-10-19
  • 什么是java算法
    什么是java算法 算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,java算法就是采用Java语言来实现解决某一问题的清晰指令。算法的特征:输入性:有零个或多个外部量作为算法的输入输出性:算法产生至少一个量作为输出确定性:...
    99+
    2016-09-25
    java入门 java 算法
  • 学习Java并发算法,LeetCode存储是必须掌握的技能吗?
    Java并发算法是现代软件开发中必不可少的技能之一。Java并发编程是指在一个程序中同时执行多个任务的能力。在多核处理器上运行的程序通常可以利用并发性来提高性能。Java提供了多种并发编程技术和框架,包括线程、锁、原子变量、Future、E...
    99+
    2023-09-11
    存储 leetcode 并发
  • Java 数组编程算法,你真的掌握了吗?
    Java 数组是一种非常重要的数据结构,它可以在程序中存储和操作一系列相同类型的数据。然而,Java 数组编程算法并不是所有程序员都能够完全掌握的。在本文中,我们将探讨几个常见的 Java 数组编程算法,并提供一些示例代码来帮助你更好地理...
    99+
    2023-10-13
    数组 编程算法 学习笔记
  • 你真的了解 Java 分布式编程算法吗?
    Java分布式编程算法是一种处理分布式计算的技术,它可以通过不同的节点分布计算任务,将计算结果整合在一起。在本文中,我们将深入了解Java分布式编程算法,并提供一些示例代码来帮助您更好地理解。 Java分布式编程算法的基础概念 Java分布...
    99+
    2023-06-20
    教程 分布式 编程算法
  • 你知道Java编程中最常用的算法吗?
    Java是一种广泛使用的编程语言,由于其灵活性和可扩展性,在各种应用程序中都得到了广泛的应用。在Java编程中,算法是一个重要的主题,因为它们是解决各种问题的核心方法。在本文中,我们将探讨Java编程中最常用的算法,并提供演示代码。 冒泡...
    99+
    2023-09-25
    编程算法 django laravel
  • Java编程中的算法优化技巧,你知道吗?
    Java是一种高级编程语言,被广泛应用于各种领域。在Java编程中,算法是非常重要的一部分。优化算法可以提高程序的执行效率,降低资源消耗,提高用户体验。本文将介绍一些Java编程中的算法优化技巧,帮助读者更好地编写高效的Java程序。 1...
    99+
    2023-09-12
    编程算法 unix path
  • ios是java吗?
    ios不是java。iOS 是由苹果公司开发的移动操作系统。苹果公司最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch 、iPad 以及 A...
    99+
    2019-10-21
    java教程 ios java
  • jdk是java吗?
    jdk是java吗?jdk不是java,Java也不是jdk。java是一门开发语言,JDK是java开发者工具包的简称,也就是说,做java开发的程序员才需要安装JDK,如果要运行java语言,只需要JRE(java runtime en...
    99+
    2020-10-28
    java入门 jdk java
  • javascript是java吗
    本篇内容介绍了“javascript是java吗”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • 什么是Java一致性Hash算法
    这篇文章主要介绍“什么是Java一致性Hash算法”,在日常操作中,相信很多人在什么是Java一致性Hash算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是Java一...
    99+
    2022-10-19
  • java广度优先算法是什么
    Java广度优先算法是一种用于图的遍历的算法。广度优先搜索(BFS)是一种基于队列的搜索算法,用于在图或树数据结构中遍历或搜索。该算...
    99+
    2023-08-11
    java
  • java人脸识别算法是什么
    Java人脸识别算法是一种基于Java语言开发的人脸识别技术,它利用计算机视觉和图像处理技术,通过对人脸图像进行特征提取、匹配和识别...
    99+
    2023-05-25
    java人脸识别 java
  • java线程调度算法是什么
    Java线程调度算法是由Java虚拟机(JVM)负责的。JVM使用了一种抢占式调度算法,即根据线程的优先级来决定该调度哪个线程执行。...
    99+
    2023-08-30
    java
  • java 排序算法之希尔算法
    目录插入排序存在的问题简单介绍基本思想代码实现大数据量耗时测试移动法实现希尔排序移动法-大数据量耗时测试算法分析 注:学习本篇的前提是要会插入排序,数据结构与算法——排序算法-插入排...
    99+
    2022-11-12
  • Java排序算法实现的方法是什么
    这篇文章主要介绍“Java排序算法实现的方法是什么”,在日常操作中,相信很多人在Java排序算法实现的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java排序算法实现的方法是什么”的疑惑有所帮助!...
    99+
    2023-06-02
  • Python 异步编程是编程算法的未来吗?
    随着计算机技术的快速发展,人们对于编程算法也在不断地探索和研究。在传统的编程中,我们常常使用同步编程来实现程序的执行,但是在某些情况下,这种方式会导致程序的运行速度变慢,特别是在处理大量的数据时。为了解决这个问题,Python 提供了异步...
    99+
    2023-10-15
    异步编程 编程算法 分布式
  • Java编程有什么秘诀?学习算法和JavaScript的NPM包是必要的吗?
    Java是一种广泛使用的编程语言,它拥有着强大的功能和广泛的应用场景。在学习Java编程的过程中,有什么秘诀可以让我们更快地掌握这门语言呢?是否需要学习算法和JavaScript的NPM包呢?本文将对此进行探讨。 一、掌握基本语法 要学好J...
    99+
    2023-08-21
    编程算法 javascript npm
  • Java分位点计算方法是什么
    本篇内容介绍了“Java分位点计算方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java 分位点(分位值)计算有一个需求给出一段时...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作