博客
关于我
Java相关的基本算法
阅读量:338 次
发布时间:2019-03-04

本文共 3154 字,大约阅读时间需要 10 分钟。

排序算法与查找方法

排序算法效率比较

以下是几种常见排序算法及其实现思想:

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;    }}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};receive(arr); // 输出:9,5,8,7,2,1,6,4,3

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;        }    }}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};select_sort(arr); // 输出:1,2,3,4,5,6,7,8,9

3. 冒泡排序

实现思想:通过多次从头到尾逐步调整,逐步将较大的元素排至数组末尾。

代码示例

public static void bubbleSort(int[] arr) {    for (int i = 0; i < 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;            }        }    }}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};bubbleSort(arr); // 输出:1,2,3,4,5,6,7,8,9

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;}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};int arrayIndex = getArrayIndex(arr, 1);System.out.println(arrayIndex); // 输出:3

5. 二分查找

实现思想:利用有序数组的性质,通过中间元素判断查找范围,逐步缩小范围。

代码示例

public static int halfSearch(int[] arr, int number) {    int min = 0;    int max = arr.length - 1;    while (min <= max) {        int mid = (min + max) / 2;        if (arr[mid] > number) {            max = mid - 1;        } else if (arr[mid] < number) {            min = mid + 1;        } else {            return mid;        }    }    return -1;}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};bubbleSort(arr);int arrayIndex = halfSearch(arr, 3);System.out.println(arrayIndex); // 输出:2

6. 快速排序

实现思想:通过选择一个基准元素,将数组划分为左半部分和右半部分,递归排序左右子数组,然后合并。

代码示例

public static void quickSort(int[] arr) {    if (null == arr) {        System.out.println("传入的数组为空!!!");        return;    }    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;        }    }}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};quickSort(arr); // 输出:1,2,3,4,5,6,7,8,9

7. 递归算法

优点

  • 代码简洁
  • 适用于树的遍历算法
  • 缺点

  • 时间和空间消耗较大
  • 计算量重复较多
  • 优化方法:使用动态规划,提前计算并存储所有可能结果以减少重复计算。

    示例

    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];    }    return f[n];}

    转载地址:http://kwse.baihongyu.com/

    你可能感兴趣的文章
    Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
    查看>>
    Plotly:如何从 x 轴删除空日期?
    查看>>
    Plotly:如何从单条迹线制作堆积条形图?
    查看>>
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>
    Plotly:如何使用 updatemenus 更新一个特定的跟踪?
    查看>>
    Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
    查看>>
    Plotly:如何向烛台图添加交易量
    查看>>
    Plotly:如何在 plotly express 中找到趋势线的系数?
    查看>>
    Plotly:如何在桑基图中设置节点位置?
    查看>>
    Plotly:如何处理重叠的颜色条和图例?
    查看>>
    Plotly:如何手动设置 plotly express 散点图中点的颜色?
    查看>>
    Plotly:如何结合 make_subplots() 和 ff.create_distplot()?
    查看>>
    Plotly:如何绘制累积的“步骤“;直方图?
    查看>>
    Quartz进一步学习与使用
    查看>>
    Plotly条形图-根据正/负值更改颜色-python
    查看>>
    PLSQL developer12安装图解
    查看>>
    PLSQL Developer调试 存储过程和触发器
    查看>>