常见14种经典排序算法(Java代码实现)

一身转战三千里,一剑曾百万师。这篇文章主要讲述常见14种经典排序算法(Java代码实现)相关的知识,希望能为你提供帮助。
想了解更多算法题可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。
一,冒泡排序
排序算法其实有很多,冒泡排序基本上算是最简单的一种排序算法了。他的原理就和他的名字一样,通过不断的比较把小的数据不断的往前移。其实冒泡排序有很多变种,我们会一一来看。我们先看下最常见的一种代码

public static void bubbleSort1(int array[])
int length = array.length;
for (int i = 0; i < length - 1; i++)
for (int j = i + 1; j < length; j++)
if (array[j] < array[i])
swap(array, i, j);





public static void swap(int[] A, int i, int j)
if (i != j)
A[i] ^= A[j];
A[j] ^= A[i];
A[i] ^= A[j];


上面排序的原理相当于气泡从水中往上冒,会逐渐变大。首先拿第一个元素和后面的所有一个个比较,如果比后面的大就交换,所以始终会保证第一个元素是最小的,然后再从第二个第三个,以此类推,swap方法表示交换两个数字的值。上面排序是每次都把待排数组中最小的值放到前面,我们能不能每次都把待排数组中最大的值放到后面呢,其实这种也是可以的,看下代码
public static void bubbleSort2(int array[])
int length = array.length;
for (int i = length - 1; i > = 0; i--)
for (int j = i - 1; j > = 0; j--)
if (array[j] > array[i])
swap(array, i, j);





public static void swap(int[] A, int i, int j)
if (i != j)
A[i] ^= A[j];
A[j] ^= A[i];
A[i] ^= A[j];


这种排序和上面第一种的那个排序正好相反,它的原理相当于气泡从大到小往水中钻,越往上气泡越大,越往下气泡越小。我们还可以前后相邻的两两比较,每一轮比较完了之后其实也会把最大的放到后面,我们看下代码
public static void bubbleSort3(int array[])
int length = array.length;
for (int i = 0; i < length - 1; i++)
for (int j = 1; j < length - i; j++)
if (array[j] < array[j - 1])
swap(array, j, j - 1);





public static void swap(int[] A, int i, int j)
if (i != j)
A[i] ^= A[j];
A[j] ^= A[i];
A[i] ^= A[j];


如果数组本来就是排序好的,或者后面的都已经排序好了,我们在一个个循环其实效率并不是很高。在排序的时候如果我们发现后面待排数组已经排序好了,后面的我们就不用一个个再排序了,我们可以改进一下,看一下代码
public static void bubbleSort4(int array[])
int length = array.length;
boolean flag;
for (int i = 0; i < length - 1; i++)
flag = true;
for (int j = 1; j < length - i; j++)
if (array[j] < array[j - 1])
swap(array, j, j - 1);
flag = false;


if (flag) break;



public static void swap(int[] A, int i, int j)
if (i != j)
A[i] ^= A[j];
A[j] ^= A[i];
A[i] ^= A[j];


【常见14种经典排序算法(Java代码实现)】如果不喜欢for循环,我们也可以改为while循环,看下代码
public static void bubbleSort5(int array[])
int length = array.length;
int i = 0,

    推荐阅读