如何实现java排序

141 阅读3分钟

1.冒泡排序(重点)

升序排列的实现思想:

1.将数组中相邻的两个数据元素进行比较,如果前面一个元素比后面的大,就把两者交换位置(一轮比较);

2.然后将上面的操作进行循环(比较n-1轮)。

排列过程如下图所示:

image.png

降序排列的实现思想:

1.将数组中相邻的两个数据元素进行比较,如果前面一个元素比后面的小,就把两者交换位置(一轮比较);

2.然后将上面的操作进行循环(比较n-1轮)。

2.2 基本实现

大家要注意,面试时经常会让我们手写冒泡排序和选择排序等算法,你必须牢牢地记住相关的代码实现哦。
public class Demo09 {

截屏2023-03-22 15.54.37.png

这种实现方式比较容易理解,但并不是最优的实现方案,因为这种方案需要比较的次数较多。

我们可以进一步对该方案进行优化,将比较的次数降下来,请继续往下看。

2.选择排序

选择排序升序思路:

1.将当前位置上的数,与它后面的每个数进行比较,选择出最小的那个数,交换到当前位置;

2.循环选择当前位置上的数。

选择排序降序思路:

1.将当前位置上的数,与它后面的每个数进行比较,选择出最大的那个数,交换到当前位置;

2.循环选择当前位置上的数。

2.1 实现案例

以下是以升序的方式实现的选择排序代码,供大家参考。

public class Demo12 {

截屏2023-03-22 15.56.15.png

3.Arrays.sort方法

Arrays工具类主要用于对数组进行排序、查找、填充、比较等的操作,该类存在于java.util包下,所以我们使用的第一步就是要先进行导包: import java.util.Arrays;

其中Arrays.sort()是Arrays类中的一个静态方法,用于对数组进行排序,我们可以直接调用。

该方法有如下几种重载形式:

●sort(T[] a):对指定T型数组按数字升序排序;

●sort(T[] a, int formIndex, int toIndex):对指定T型数组中[formIndex,toIndex)数据按数字升序排序;

●sort(T[] a, Comparator<? supre T> c): 依据比较器对T型数组进行排序;

●sort(T[] a, int formIndex, int toIndex, Comparator<? supre T> c): 依据比较器产生的顺序对T型数组中的[formIndex,toIndex)进行排序。

接下来再给大家设计一个利用Arrays.sort方法实现的排序案例。

public class Demo13 {

截屏2023-03-22 15.57.02.png

当然java数组就可以使用该方法来排序哦!!Arrays.sort()方法使用的是快速排序算法,可以对任意类型的数组进行排序,使用时需要实现Comparable接口或传入Comparator对象。

示例代码:

int[] nums = {5, 2, 9, 1, 5};  
Arrays.sort(nums); // 对数组进行排序

如果要对对象数组进行排序,需要实现Comparable接口或传入Comparator对象,示例代码:  
class Person implements Comparable{  
private String name;  
private int age;  
// ...省略构造方法和getter/setter方法  
@Override  
public int compareTo(Person o) {  
return this.age - o.age;  
}  
}

Person[] persons = new Person[3];  
persons[0] = new Person("Tom", 20);  
persons[1] = new Person("Jerry", 18);  
persons[2] = new Person("Mary", 22);  
Arrays.sort(persons); // 对Person对象数组按照年龄升序排序

另外,Java中还提供了其他排序算法的实现,例如归并排序、堆排序等,可以使用Collections.sort()方法或自己实现排序算法来实现数组排序。