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

如何使用Java函数排序一个数组

发布时间:2023-06-09 12:05:05

在Java中对数组进行排序的方法有很多,可以使用内置函数,也可以自行编写算法。

使用内置函数——Arrays.sort()

Arrays类中有一个sort()函数可以对数组进行排序。sort()函数有多种重载形式,最常用的是对整型、字符型和对象型数组排序的形式。下面对这三种形式进行详细介绍。

1. 对整型数组排序的形式:

Arrays.sort(int[] array)

其中,array为要排序的整型数组。

示例代码:

int[] array = {5, 3, 2, 8, 7}; //定义一个整型数组

Arrays.sort(array); //对数组进行排序

for(int i=0; i<array.length; i++){ //遍历打印排序后的数组

    System.out.print(array[i] + " ");

}

2. 对字符型数组排序的形式:

Arrays.sort(char[] array)

其中,array为要排序的字符型数组。

示例代码:

char[] array = {'c', 'a', 'v', 'd', 'e'}; //定义一个字符型数组

Arrays.sort(array); //对数组进行排序

for(int i=0; i<array.length; i++){ //遍历打印排序后的数组

    System.out.print(array[i] + " ");

}

3. 对对象型数组排序的形式:

Arrays.sort(T[] array)

其中,T为要排序的对象类型,array为要排序的对象型数组。

需要注意的是,要想对对象型数组进行排序,该对象所属的类必须实现Comparable接口,并重写compareTo()方法。

示例代码:

class Student implements Comparable<Student>{ //定义一个学生类实现Comparable接口

    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;

    }

    @Override //重写compareTo()方法

    public int compareTo(Student o) { 

        if(this.age < o.getAge()){

            return -1;

        }

        else if(this.age > o.getAge()){

            return 1;

        }

        else{

            return 0;

        }

    }

}

public class Sort { 

    public static void main(String[] args) {

        Student[] students = new Student[]{ //创建学生数组

                new Student("ZhangSan", 20),

                new Student("LiSi", 19),

                new Student("WangWu", 22),

                new Student("ZhaoLiu", 18),

                new Student("QianQi", 20)

        };

        Arrays.sort(students); //对学生数组进行排序

        for(Student student : students){ //遍历打印排序后的数组

            System.out.println(student.getName() + " " + student.getAge());

        }

    }

}

自行编写排序算法

如果要对一个数组进行较为复杂的排序,或者想自行实现一个排序算法的话,可以使用冒泡排序、插入排序、选择排序、希尔排序、归并排序、快速排序等排序算法。

这里介绍一下快速排序算法。

快速排序算法

快速排序是一种基于分治思想的排序算法,其核心思想是将一个数组分成两个子数组,再对这两个子数组分别进行排序。具体步骤如下:

1. 选择一个基准元素并得到其在数组中的位置,通常选择数组第一个元素为基准元素。

2. 将数组分成两个子数组,使得第一个子数组中的所有元素都小于等于基准元素,第二个子数组中的所有元素都大于基准元素。

3. 分别对第一个子数组和第二个子数组进行排序。

4. 合并第一个子数组、基准元素和第二个子数组。

5. 递归地对左子数组和右子数组进行排序,直到整个数组都排好序。

代码实现如下:

public class QuickSort {

    public static void quickSort(int[] array, int left, int right){ //快排函数

        if(left >= right){ //递归结束条件

            return;

        }

        int i = left, j = right; //定义左右指针

        int pivot = array[left]; //选取第一个元素为基准元素

        while(i < j){ //循环调整数组

            while(i < j && array[j] > pivot){ //从右往左找第一个小于等于基准元素的数

                j--;

            }

            if(i < j){ //找到了,则交换

                array[i] = array[j];

                i++;

            }

            while(i < j && array[i] <= pivot){ //从左往右找第一个大于基准元素的数

                i++;

            }

            if(i < j){ //找到了,则交换

                array[j] = array[i];

                j--;

            }

        }

        array[i] = pivot; //将基准元素放到正确的位置上

        quickSort(array, left, i-1); //递归排序左子数组

        quickSort(array, i+1, right); //递归排序右子数组

    }

    public static void main(String[] args) {

        int[] array = {5, 3, 2, 8, 7}; //定义一个整型数组

        quickSort(array, 0, array.length-1); //对数组进行快排

        for(int i=0; i<array.length; i++){ //遍历打印排序后的数组

            System.out.print(array[i] + " ");

        }

    }

}

以上就是Java中对数组进行排序的方法,无论使用内置函数还是自行编写排序算法,都需要注意时间复杂度和空间复杂度,以保证程序运行效率。