美文网首页我爱编程
Java相关的基本算法

Java相关的基本算法

作者: 末日携手的半阳 | 来源:发表于2018-04-13 19:49 被阅读22次

1.数组逆序

实现思想:第一个递增,最后一个递减

//数组元素逆序
public static void receive(int[] arr){
    for (int start = 0, end = arr.length-1; start < end; start++,end--) {
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
    }
}

2.选择排序

实现思想:从左往右比较找到最小值,从左往右依次排放。

// 选择排序
   public static void select_sort(int[] arr) {
       for (int i = 0; i < arr.length - 1; i++) {
           //选择排序的优化
           int k = i;
           for (int j = k + 1; j < arr.length - 1; j++) {
               // 找到最小值的下标
               if (arr[j] < arr[k]) {
                   k = j;
               }
           }
           if (k != i) {
               int temp = arr[i];
               arr[i] = arr[k];
               arr[k] = temp;
           }
       }
   }

深入了解:https://www.cnblogs.com/shen-hua/p/5424059.html

3.冒泡排序

实现思想:从头开始,依次相邻比较,把最大的放到最后边

//冒泡排序
public static void bubbleSort(int[] arr) {
    //功能
    //外层循环用来控制数组循环的圈数
    for (int i = 0; i < arr.length-1; i++) {
        //j < arr.length-1 为了避免角标越界
        //j < arr.length-1-i 为了比较效率,避免重复比较
        //内层循环用来完成元素值比较,把大的元素值互换到后面
        for (int j = 0; j < arr.length-1-i; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

4.普通查找

实现思想:遍历数组,查找相同的元素

//普通查找
public static int getArrayIndex(int[] arr, int number) {
    //把数组中的元素依次与指定的数值 进行比较
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == number) {
            //找到了
            return i;
        }
    }
    return -1;
}

5.二分法查找

实现思想:已知是排好序的数组,用中间元素和要查找的元素比较,大的话取左边

//二分查找法(折半查找法)
public static int halfSearch(int[] arr, int number) {
    //定义3个变量,用来记录min, min, mid的位置
    int min = 0;
    int max = arr.length-1;
    int mid = 0;
        while (min <= max) {
           mid = (min+max)/2;
        //没找了, 更新范围,继续比较
        //更新范围
        if (arr[mid] > number) {
            //在左边
            max = mid-1;
        } else if(arr[i] < number){
            //在右边
            min = mid+1;
        }
        else{
              return mid ;
          }
     
    return -1;
}

https://www.cnblogs.com/kangyi/p/4262169.html

6.快排

实现思想:小的放前边,找一个index,放最小的索引,循环一轮得到一个最小值

public static void quickSort(int[] arr) {
        if (null == arr) {
            System.out.println("传入的数组为空!!!");
        }
        for (int i =0;i < arr.length;i++) {
            int index = i;
            for (int j = i;j < arr.length;j++) {
                if (arr[index] > arr[j]) {
                    index = j;
                }
            }
            if (index != i) {
                int temp = arr[index];
                arr[index] = arr[i];
                arr[i] = temp;
            }
        }
    }

7.快速排序

实现思想:挖坑填数+分治法
思想:先取一个基数,下标从右向左找比基数小的,从左向右找比基数大的,找到和基数互换位置,然后进行下一轮操作,然后递归调用快排算法。

public static void quick_sort(int[] arr, int l, int r) {
        if (l < r) {
            // 确定数组下标的范围
            int i = l, j = r;
            // 先确定基准数
            int flag = arr[l];
            while (i < j) {
                // 下标j从右往左递减,找比基数小的数
                while (i < j && flag < arr[j])
                    j--;
                if (i < j) {
                    // 找到填补基数坑
                    arr[i] = arr[j];
                    i++;
                }
                // 下标i从左往右递增,找比基数大的数
                while (i < j && flag > arr[i])
                    i++;
                if (i < j) {
                    // 找到填补新坑
                    arr[j] = arr[i];
                    j--;
                }

            }
            // 将原来的基准值放入中间数
            arr[j] = flag;

            // 递归调用
            // 中间数的左边递归调用
            quick_sort(arr, l, i - 1);
            // 中间数的右边递归调用
            quick_sort(arr, i + 1, r);

        }
    }

8.递归算法

优点:
1.代码简洁
2.在树的遍历算法中,递归的实现比循环多
缺点:
1.由于是函数调用自身,时间和空间消耗比较大
2.递归中很多计算都是重复的,效率比较低
递归的优化:
使用动态规划:将可能出现的结果全部计算并保存,直到得到所需要的结果

int Fib(unsigned n)
{
    if(n==1)return 1;
    if(n==0)return 0;
    return Fib(n-1)+Fib(n-2);
}


int Fib(unsigned n)
{
    int* f=new int[n+1];
    f[1]=1;f[0]=0;
    for(int i=0;i<=n;i++);
        f[i]=f[i-1]+f[i-2];  
    int r=f[n];
    return r;
}

相关文章

  • Java相关的基本算法

    1.数组逆序 实现思想:第一个递增,最后一个递减 2.选择排序 实现思想:从左往右比较找到最小值,从左往右依次排放...

  • 技术体系

    一,java核心 java基础,jvm,算法,多线程,设计模式 Java基础:java基础相关,全栈java基础 ...

  • 7月份之前的技术学习与计划

    读书计划 基础方面 算法:《算法》,《算法导论》,需要认真理解算法,并独立完成相关习题 语言:《JAVA编程思想》...

  • Java开发学习之路

    Java开发的学习之路 基础知识 编程语言:Java Python C 基本算法 基本网络知识:TCP/IP HT...

  • java排序方法资料

    java排序,效率高的是哪种排序方法 JAVA快速排序(高效) java中常用的几种排序算法 相关代码: /* *...

  • Java学习路线?

    基础知识 编程语言: Java Python 基本算法 基本网络知识:TCP/IP HTTP/HTTPS 基本的...

  • leetcode 304

    基本思路:使用DP维护,算法基本是小学奥数级别。 C++ Java

  • Android内存优化(二)DVM和ART的GC日志分析

    相关文章Android性能优化系列Java虚拟机系列 前言 在Java虚拟机(三)垃圾标记算法与Java对象的生命...

  • java中的基本算法

    整理一下常用的又基础的算法。由于平时的项目比较简单,很少用到算法,但工作不只是眼前的苟且,还有诗和远方。 1.链表...

  • Java虚拟机调优原理及技巧

    一、相关概念 1. 基本回收算法 ①. 引用计数(Reference Counting):比较古老的回收算法。原理...

网友评论

    本文标题:Java相关的基本算法

    本文链接:https://www.haomeiwen.com/subject/mvshkftx.html