java实现排序算法

冒泡排序

  • 思路

我们要对4,5,6,3,2,1从小到大进行排序。


冒泡排序只会操作相邻的两个数据,每次冒泡操作都会对相邻的两个元素进行比较,如果第一个数小于第二个数、则此次不移动位置,如果第一个数大于第二个数、则这两个数位置互换,保证大数往后移。


一次冒泡会至少让一个元素移动到他应该在的位置,重复n次,就完成了n个数据的排序工作

java实现排序算法
java实现排序算法

  • java代码实现
	/**
	 * flag为标识词,当前内循环若无交换操作,说明数组已经有序,无需进行剩余的循环比较
	 */
	public void simpleSort(int[] array) {
        if (array.length == 0) {
            return;
        }

        for (int i = 0; i < array.length; i++) {
            boolean flag = false;
            for (int j = i + 1; j < array.length; j++) {
                if (array[i] > array[j]) {
                    int t = array[i];
                    array[i] = array[j];
                    array[j] = t;
                    flag = true;
                }
            }
            if(!flag){
                break;
            }
        }
    }
  • 复杂度分析

空间复杂度:
冒泡的过程只涉及相邻数据的交换操作,需要常量级的临时空间,所以空间复杂度为O(1),空间复杂度为O(1)的排序称为原地排序算法。


时间复杂度:
最好情况下,数组本身有序,所以只需冒泡一次就可以直接结束,最好时间复杂度为O(n);最坏情况下,数组为倒叙排列,我们需要n次冒泡,耗时为:n(n+1)/2,所以最坏时间复杂度为:O(n2)。


稳定性分析:
为了保证数据稳定性,当前后两个数据大小相等时,我们不做互换操作,即可保证稳定性。上边的java代码为稳定的排序算法。

插入排序

  • 思路

我们要对4,5,6,3,2,1从小到大进行排序。

  • java代码实现
  • 复杂度分析

空间复杂度:


时间复杂度:


稳定性分析:

选择排序

  • 思路

我们要对4,5,6,3,2,1从小到大进行排序。

  • java代码实现
  • 复杂度分析

空间复杂度:


时间复杂度:


稳定性分析:

归并排序

  • 思路

我们要对4,5,6,3,2,1从小到大进行排序。

  • java代码实现
  • 复杂度分析

空间复杂度:


时间复杂度:


稳定性分析:

快速排序

  • 思路

我们要对4,5,6,3,2,1从小到大进行排序。

  • java代码实现
  • 复杂度分析

空间复杂度:


时间复杂度:


稳定性分析:

桶排序

  • 思路

我们要对4,5,6,3,2,1从小到大进行排序。

  • java代码实现
  • 复杂度分析

空间复杂度:


时间复杂度:


稳定性分析:

计数排序

  • 思路

我们要对4,5,6,3,2,1从小到大进行排序。

  • java代码实现
  • 复杂度分析

空间复杂度:


时间复杂度:


稳定性分析:

基数排序

  • 思路

我们要对4,5,6,3,2,1从小到大进行排序。

  • java代码实现
  • 复杂度分析

空间复杂度:


时间复杂度:


稳定性分析: