如何使用Java函数排序一个数组
在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中对数组进行排序的方法,无论使用内置函数还是自行编写排序算法,都需要注意时间复杂度和空间复杂度,以保证程序运行效率。
