封装好Android开发中可用的快速排序算法工具类

2024-11-26 14:41 封装好Android开发中可用的快速排序算法工具类已关闭评论

Android开发中可用的快速排算法工具类,可以轻松集成到项目中。它包含泛型支持和便于调用的静态方法,能够对数组或列表进行排序。


工具类代码

import java.util.List;

public class QuickSortUtil {

    /**
     * 对数组进行快速排序
     *
     * @param arr  待排序的数组
     */
    public static void quickSort(int[] arr) {
        if (arr == null || arr.length <= 1) return;
        quickSort(arr, 0, arr.length - 1);
    }

    private static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(arr, low, high);
            quickSort(arr, low, pivotIndex - 1);  // 排序左半部分
            quickSort(arr, pivotIndex + 1, high); // 排序右半部分
        }
    }

    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[high]; // 基准值
        int i = low - 1;       // 标记小于基准值的最后位置

        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {
                i++;
                swap(arr, i, j);
            }
        }

        swap(arr, i + 1, high); // 将基准值放到正确位置
        return i + 1;           // 返回基准值位置
    }

    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    /**
     * 对 List 进行快速排序
     *
     * @param list 待排序的列表
     * @param <T>  支持比较的类型
     */
    public static <T extends Comparable<T>> void quickSort(List<T> list) {
        if (list == null || list.size() <= 1) return;
        quickSort(list, 0, list.size() - 1);
    }

    private static <T extends Comparable<T>> void quickSort(List<T> list, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(list, low, high);
            quickSort(list, low, pivotIndex - 1);  // 排序左半部分
            quickSort(list, pivotIndex + 1, high); // 排序右半部分
        }
    }

    private static <T extends Comparable<T>> int partition(List<T> list, int low, int high) {
        T pivot = list.get(high); // 基准值
        int i = low - 1;          // 标记小于基准值的最后位置

        for (int j = low; j < high; j++) {
            if (list.get(j).compareTo(pivot) < 0) {
                i++;
                swap(list, i, j);
            }
        }

        swap(list, i + 1, high);  // 将基准值放到正确位置
        return i + 1;             // 返回基准值位置
    }

    private static <T> void swap(List<T> list, int i, int j) {
        T temp = list.get(i);
        list.set(i, list.get(j));
        list.set(j, temp);
    }
}

代码解析

支持的功能

  1. 数组排序
    • 方法 quickSort(int[] arr) 用于对整型数组排序。
  2. 列表排序
    • 方法 quickSort(List<T> list) 用于对实现了 Comparable 接口的列表排序(如 ArrayList)。
  3. 核心方法
    • 递归地将数组或列表分区,并对左右两部分排序。

适配 Android 的特点

  • 泛型支持
    • 可以对任何实现了 Comparable 的对象进行排序(例如自定义对象)。
  • 轻量级
    • 不依赖额外的库,可以直接在 Android 项目中使用。
  • 内存友好
    • 快速排序是原地排序算法,仅需少量额外空间。

调用示例

排序整型数组

int[] numbers = {8, 3, 1, 7, 0, 10, 2};
QuickSortUtil.quickSort(numbers);

// 输出结果
for (int num : numbers) {
    System.out.print(num + " ");
}
// 输出:0 1 2 3 7 8 10

排序列表(自定义对象)

定义一个简单的对象类 Student

class Student implements Comparable<Student> {
    String name;
    int grade;

    public Student(String name, int grade) {
        this.name = name;
        this.grade = grade;
    }

    @Override
    public int compareTo(Student other) {
        return Integer.compare(this.grade, other.grade);
    }

    @Override
    public String toString() {
        return name + ": " + grade;
    }
}

调用 quickSort 排序:

List<Student> students = new ArrayList<>();
students.add(new Student("Alice", 85));
students.add(new Student("Bob", 92));
students.add(new Student("Charlie", 78));

QuickSortUtil.quickSort(students);

// 输出结果
for (Student student : students) {
    System.out.println(student);
}
// 输出:
// Charlie: 78
// Alice: 85
// Bob: 92

小结

这个快速排序工具类在 Android 项目中很实用,尤其适合处理动态列表、数据对象排序等场景。例如:
- 排序 RecyclerView 数据源。
- 对后台接口返回的 JSON 数据(经过解析)进行排序。
- 在游戏排行榜或电子商务应用中,对分数或价格进行排序。

直接将工具类复制到项目中即可快速使用!序算法工具类

当前文章价值7.61元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://teachcourse.cn/3722.html ,谢谢支持!

资源分享

harmony初步学习自定义组件 harmony初步学习自定义组件
003-wordpress站点如何获取REST API认证所需要的用户名、密码 003-wordpress站点如何获取RES
Fragment+FragmentTabHost实现仿QQ底部菜单栏 Fragment+FragmentTabHost实
harmony学习AppStorage在多个UIAbility组件之间的应用 harmony学习AppStorage在多个U

评论已关闭!