千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:太原千锋IT培训  >  技术干货  >  如何实现java排序?

如何实现java排序?

来源:千锋教育
发布人:qyf
时间: 2023-03-20 17:34:33

  1.冒泡排序(重点)

  升序排列的实现思想:

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

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

  排列过程如下图所示:

图片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()方法或自己实现排序算法来实现数组排序。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

React的遮羞布

2023-01-31

Local Storage的高阶用法

2023-01-31

javascript中如何将伪数组转换成真数组

2023-01-30

最新文章NEW

变量的预解析

2023-01-31

Vue中常见的组件间通信方案及典型应用场景

2023-01-31

VueJS中的动画菜单效果的实现

2023-01-31

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>