如何实现java排序?
1.冒泡排序(重点)
升序排列的实现思想:
1.将数组中相邻的两个数据元素进行比较,如果前面一个元素比后面的大,就把两者交换位置(一轮比较);
2.然后将上面的操作进行循环(比较n-1轮)。
排列过程如下图所示:
降序排列的实现思想:
1.将数组中相邻的两个数据元素进行比较,如果前面一个元素比后面的小,就把两者交换位置(一轮比较);
2.然后将上面的操作进行循环(比较n-1轮)。
2.2 基本实现
大家要注意,面试时经常会让我们手写冒泡排序和选择排序等算法,你必须牢牢地记住相关的代码实现哦。
public class Demo09 {
public static void main(String[] args) {
// 冒泡排序--基本实现
//待排序的数组
int[] arr = { 1, 3, 46, 22, 11 };
//控制需要比较几轮
for (int i = 0; i < arr.length; i++) {
//控制每一轮的比较次数
for (int j = 0; j < arr.length - 1; j++) {
//如果前面的比后面的数字大,则两者就进行交换
if (arr[j] > arr[j + 1]) {
//两数交换,需要一个“第三方”,好比两杯水互换,需要第三个杯子。
//交换两个变量的值,必须借助一个临时变量。
//定义一个新的临时变量,将数组中的前面的元素先赋值给临时变量
int temp = arr[j];
//后面的值赋值到前面的位置上
arr[j] = arr[j + 1];
//再将临时变量的值赋值到后面的位置上
arr[j + 1] = temp;
}
}
}
//遍历排序后的数组
for(int i=0;i<arr.length;i++) p="" {<="">
System.out.print(arr[i]+"\t");
}
}
}
这种实现方式比较容易理解,但并不是最优的实现方案,因为这种方案需要比较的次数较多。我们可以进一步对该方案进行优化,将比较的次数降下来,请继续往下看。
2.选择排序
选择排序升序思路:
1.将当前位置上的数,与它后面的每个数进行比较,选择出最小的那个数,交换到当前位置;
2.循环选择当前位置上的数。
选择排序降序思路:
1.将当前位置上的数,与它后面的每个数进行比较,选择出最大的那个数,交换到当前位置;
2.循环选择当前位置上的数。
2.1 实现案例
以下是以升序的方式实现的选择排序代码,供大家参考。
public class Demo12 {
public static void main(String[] args) {
// 选择排序
// 待排序的数组
int[] arr = { 1, 3, 46, 22, 11 };
for (int j = 0; j < arr.length-1; j++) {
//选择下标为0的位置
int min = j;
//将当前这个数与后面的每个数进行比较
for (int i = j+1; i < arr.length; i++) {
//如果当前数字小于标记的最小值,则将当前数字标记为最小值
if(arr[min] > arr[i]) {
min = i;
}
}
//如果当前数字不是最小的,则进行交换
if(min != j) {
int temp = arr[j];
arr[j] = arr[min];
arr[min] = temp;
}
}
//遍历排序后的数组
for(int i=0;i<arr.length;i++) p="" {<="">
System.out.print(arr[i]+"\t");
}
}复制代码
}
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 c): 依据比较器对T型数组进行排序;
●sort(T[] a, int formIndex, int toIndex, Comparator c): 依据比较器产生的顺序对T型数组中的[formIndex,toIndex)进行排序。
接下来再给大家设计一个利用Arrays.sort方法实现的排序案例。
public class Demo13 {
public static void main(String[] args) {
// 选择排序
//遍历排序后的数组
String[] names = { "cxk", "rose", "lihua", "lilei", "zhaosi" };
//直接利用Arrays类提供的数组排序的方法,内部是基于“快速排序”实现的。
Arrays.sort(names);
for (int i = 0; i < names.length; i++) {
System.out.print(names[i] + "\t");
}
}
}
当然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()方法或自己实现排序算法来实现数组排序。
相关推荐HOT
更多>>你需要深入了解一下JavaScript的new Function
JavaScript技术一直处于不断发展壮大中,如果你是前端开发人员或者JavaScript开发工程师,那么,今天这个知识点,你有必要认真了解一下,它就是...详情>>
2023-01-31 17:57:17理解React Virtual DOM
文件模型(Document Object Model,DOM) HTML、XML 和 SVG 文件的程序介面。它提供了文件(树)的程序的文件表示方法,并定义了访问并改变文件架构...详情>>
2023-01-31 17:55:42拿到就能用的25个JavaScript代码
JavaScript 有很多单行代码的实用例子,它们可以做很多强大的事情,无论你是 JavaScript 新手还是经验丰富的开发人员,学习些新东西总是好的。详情>>
2023-01-31 17:52:25CSS字体和字号
在浏览器里验证一下,字体大小果然没有发生变化!除了em,还可以使用百分比 (%) 这个单位,它是相对于父元素的大小来计算文本尺寸的。比如定义 p...详情>>
2023-01-30 16:03:02