欢迎访问宙启技术站
智能推送

Java函数中的数组排序方法

发布时间:2023-06-19 07:58:57

Java是一种强类型语言,可以使用数组来存储和操作数据。数组是一种有序的集合,可以包含相同或不同类型的元素。Java中提供了多种排序算法,可以使数组按照不同的排序方式进行排序。在本文中,我们将讨论Java函数中的数组排序方法。

Java中的数组排序方法可以分为两类:

1. 内置排序方法:Java中提供了Arrays类,其中包含了许多内置排序方法,包括了快速排序,插入排序,归并排序,等等。

2. 自定义排序方法:我们可以使用自定义的排序方法,来实现按照我们的需求对数组进行排序。

下面我们将逐一介绍Java中常用的数组排序方法。

一、内置排序方法

1. Arrays.sort方法

Arrays.sort方法是Java中最常用的排序方法之一。该方法可以对任何数组进行排序,无论数组中的元素是什么类型,按照升序进行排序。

语法:

public static void sort(Object[] a)

public static void sort(Object[] a, Comparator c)

代码示例:

public class Test {

    public static void main(String[] args) {

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

        Arrays.sort(numbers);

        System.out.println(Arrays.toString(numbers));

    }

}

运行结果:

[1, 2, 3, 4, 5, 6, 7, 8]

2. Arrays.parallelSort方法

Java8之后,Arrays类还新增了一个parallelSort方法,与sort方法一样,可以对任何类型的数组进行排序,与sort不同的是,parallelSort方法可以在多个CPU上并行执行排序,从而加快排序速度。

语法:

public static void parallelSort(int[] a)

代码示例:

public class Test {

    public static void main(String[] args) {

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

        Arrays.parallelSort(numbers);

        System.out.println(Arrays.toString(numbers));

    }

}

运行结果:

[1, 2, 3, 4, 5, 6, 7, 8]

3. Arrays.sort方法的多种重载形式

Java中的Arrays.sort方法有多个重载形式,可以对不同类型的数组进行排序,并且可以指定按照升序或降序排序。

语法:

public static void sort(int[] a) // 对整数数组进行升序排序

public static void sort(int[] a, int fromIndex, int toIndex) // 对整数数组指定范围进行升序排序

public static void sort(long[] a) // 对长整型数组进行升序排序

public static void sort(float[] a) // 对浮点型数组进行升序排序

public static void sort(char[] a) // 对字符型数组进行升序排序

public static void sort(Object[] a, Comparator c) // 对自定义类型的数组按照Comparator指定的方式进行排序

public static int binarySearch(Object[] a, Object key) // 对已排序的数组进行二分查找

public static int binarySearch(int[] a, int key) // 对已排序的整数数组进行二分查找

代码示例:

public class Test {

    public static void main(String[] args) {

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

        Arrays.sort(numbers, 2, 5);

        System.out.println(Arrays.toString(numbers));

    }

}

运行结果:

[5, 3, 4, 7, 1, 8, 6, 2]

4. Arrays.sort方法的自定义比较器

为了更好地满足不同的需求,Arrays.sort方法允许我们自定义比较器,根据比较器指定的排序规则对数组进行排序。

语法:

public static <T> void sort(T[] a, Comparator<? super T> c)

代码示例:

public class Student {

    private String name;

    private int age;

    public Student(String name, int age) {

        this.name = name;

        this.age = age;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public String toString() {

        return "Student{" + "name='" + name + '\'' + ", age=" + age + '}';

    }

}

public class StudentComparator implements Comparator<Student> {

    public int compare(Student s1, Student s2) {

        if (s1.getAge() > s2.getAge()) {

            return 1;

        } else if (s1.getAge() < s2.getAge()) {

            return -1;

        } else {

            return 0;

        }

    }

}

public class Test {

    public static void main(String[] args) {

        Student[] students = { new Student("张三", 18), new Student("李四", 20), new Student("王五", 19) };

        Arrays.sort(students, new StudentComparator());

        System.out.println(Arrays.toString(students));

    }

}

运行结果:

[Student{name='张三', age=18}, Student{name='王五', age=19}, Student{name='李四', age=20}]

二、自定义排序方法

除了使用内置的排序方法之外,我们还可以自定义排序方法,以满足自己特定的需求。

1. 冒泡排序

冒泡排序是一个简单的排序算法,通过比较相邻元素的大小,将较大的元素交换到数组的右端,较小的元素交换到数组的左端, 次排序后,最大的元素就被排到了右端,接着对左端的元素进行排序,以此类推,直到所有元素都被排序为止。

代码实现:

public static void bubbleSort(int[] arr) {

    int temp; //临时变量

    boolean flag; //是否交换标志

    for (int i = 0; i < arr.length - 1; i++) {

        flag = false; //开始时假设每一轮都没有交换

        for (int j = 0; j < arr.length - 1 - i; j++) {

            if (arr[j] > arr[j + 1]) {

                temp = arr[j];

                arr[j] = arr[j + 1];

                arr[j + 1] = temp;

                flag = true; //发生了交换

            }

        }

        if (!flag) {

            break; //如果没有交换,结束排序

        }

    }

}

2. 快速排序

快速排序是一种高效的排序算法,它通过分治策略将原问题划分为若干个子问题,依次解决子问题,最终将所有子问题的解组合成原问题的解。该算法的基本思想是:选择一个基准元素,将数组分成两个子序列,使得左边的子序列所有元素都小于基准元素,右边的子序列所有元素都大于基准元素。然后对左右两个子序列进行递归排序,最终将两个排序后的子序列合并起来即可。

代码实现:

public static void quickSort(int[] arr, int left, int right) {

    if (left >= right) {

        return; //如果左指针大于或等于右指针,返回

    }

    int i = left, j = right, pivot = arr[left];

    while (i < j) {

        while (i < j && arr[j] > pivot) {

            j--;

        }

        if (i < j) {

            arr[i++] = arr[j];

        }

        while (i < j && arr[i] < pivot) {

            i++;

        }

        if (i < j) {

            arr[j--] = arr[i];

        }

    }

    arr[i] = pivot;

    quickSort(arr, left, i - 1);

    quickSort(arr, i + 1, right);

}

3. 选择排序

选择排序是一种简单的排序算法,