一身转战三千里,一剑曾百万师。这篇文章主要讲述常见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,推荐阅读
- 皕杰报表之单元格属性
- ArrayDeque源码详解
- cookie分析
- 深入解析字符串的比较方法(“==”操作符;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。)
- JavaMap集合,HashMap,LinkedHashMap,HashTable,Hashmap底层的原理
- JAVA JDK9新特性 List接口,Set接口,Map接口:静态的方法of,可以给集合一次性添加多个元素
- protobuf源码解析与netty+rpc实战
- JavaList,LinkedList,Set,HashSet,LinkedHashSet,hashCode方法,可变参数,为什么重写equals方法必须重写hashCode方法
- 防火墙基础之策略部署