
Java程序员编程中经常使用到Java数组排序,下面详解四种常用的Java数组排序方法@mikechen
冒泡排序法
冒泡排序的英文Bubble Sort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。
下面通过一个动图来看一看冒泡排序到底是怎么样移动的,如下图所示:

代码示例如下:
public static void main(String[] args) {
int num[]= {5,68,1,8};
System.out.println("数组排序前的顺序:");
for(int i=0;i<num.length;i++) {
System.out.println(num[i]+"");
}int temp;
for(int i=0;i<num.length-1;i++) {//总共需要比较3轮
for(int j=0;j<num.length-i-1;j++) {//每轮比较
if(num[j]>num[j+1]) {
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}System.out.println("排序后的顺序是:");
for(int i1=0;i1<num.length;i1++) {
System.out.println(num[i1]+" ");
}
}
数组排序前的顺序:
5 68 1 8
数组排序后的顺序:
1 5 8 68
选择排序
选择排序也是一种简单直观的排序算法,实现原理比较直观易懂。
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
下面通过一个动图来看一看选择排序到底是怎么样移动的,如下图所示:

代码如下:
//选择排序
public static void selectionSort(int[] arr){
//定义一个数,用于记录找到的数
int temp = 0;
//第一层for循环为执行的总次数,因为执行到倒数第二个数是,数组已经有序,故arr.length -1
for(int i = 0; i < arr.length -1; i++){
//用于记录下标
int index = i;
//这里是从i开始后的所有数都要进行比较
for (int j = i + 1;j < arr.length; j++){
//如果发现有比arr[i]大的,则更新下标,这样是为了最终找到最小的那个数的下标
if (arr[index] > arr[j]){
index = j;
}
}
//如果进入循环前的i发生了变化,则证明有数更小,并且更小的数,下标为j,直接交换即可
if (index != i){
temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
}
插入排序
插入排序(InsertionSort),一般也被称为直接插入排序,适合于少量元素的排序。
插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表。
下面通过一个动图来看一看插入排序到底是怎么样移动的,如下图所示:

代码如下:
//插入排序
public static void insertSort(int[] arr){
//用于记录数据以及下标
int temp = 0 , j = 0;
//从第二个数(即 i = 1)开始进行对前面进行插入
for(int i = 1; i < arr.length; i++){
//记录这个数以及下标
temp = arr[i];
j = i;
//记录下的temp比它前面的数(j - 1)要小,则往前插入,当j = 0时为最前面的数了,所以结束
while (j > 0 && temp <arr[j - 1]){
//直接让在自己前面的数将自己覆盖(可以看成是前面的数往后退了),因为已经用temp记录下来了
arr[j] = arr[j-1];
//然后继续往前找
j--;
}
//循环结束后,则说明已经找到了位置,而且下标为j,直接插入即可
arr[j] = temp;
}
}
快速排序
Java快速排序在几种排序方法中是效率较高的,快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序,它采用了一种分治的策略,通常称其为分治法。
快速排序的基本思想:
1.先从要排序的数列中找定义一个基准数;
2.将比基准数大的放在基准数的右边,比基准数小的放在基准数的左边;
3.再对左右区间重复第二步,直到各区间只有一个数。
下面通过一个动图来看一看快速排序到底是怎么样移动的,如下图所示:

代码示例如下:
1//Java 代码实现
2public class QuickSort implements IArraySort {
3
4 @Override
5 public int[] sort(int[] sourceArray) throws Exception {
6 // 对 arr 进行拷贝,不改变参数内容
7 int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
8
9 return quickSort(arr, 0, arr.length - 1);
10 }
11
12 private int[] quickSort(int[] arr, int left, int right) {
13 if (left < right) {
14 int partitionIndex = partition(arr, left, right);
15 quickSort(arr, left, partitionIndex - 1);
16 quickSort(arr, partitionIndex + 1, right);
17 }
18 return arr;
19 }
20
21 private int partition(int[] arr, int left, int right) {
22 // 设定基准值(pivot)
23 int pivot = left;
24 int index = pivot + 1;
25 for (int i = index; i <= right; i++) {
26 if (arr[i] < arr[pivot]) {
27 swap(arr, i, index);
28 index++;
29 }
30 }
31 swap(arr, pivot, index - 1);
32 return index - 1;
33 }
34
35 private void swap(int[] arr, int i, int j) {
36 int temp = arr[i];
37 arr[i] = arr[j];
38 arr[j] = temp;
39 }
40
41}
Java数组排序总结
以上主要就详解了Java数组排序的四种方法:快速排序法、冒泡法、选择排序法、插入排序法,希望对你有所帮助!
关于mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。