您的位置:首页 > 其它

常见排序算法概述

2017-02-28 16:02 134 查看

一、算法复杂度对比



总之,

在平均情况下,快速排序最快;

在最好情况下,冒泡排序和直接插入排序最快;

在最坏情况下,堆排序和归并排序排序速断最快。

常见的算法时间复杂度由小到大依次为:

  O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<…<O(2n)<O(n!)

二、排序算法说明

1. 冒泡排序

    运作如下:

a. 比较相邻元素,如果前一个比后一个大,就把它们调换位置

     b. 对每一对相邻的元素做同样的工作,从开始第一对到结束最后一对。这步做完,最后的元素就是最大的元素

c. 针对所有元素重复以上的步骤,除了最后一个

d. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

口诀: 外层循环n-1,内层循环n-1-i.

例子:

public static void main(String[] args) {
int[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
SortCommon.bubbleSort(arr);
}

public static void bubbleSort(int[] arr) {
boolean didSwap;
for (int i = 0; i < arr.length - 1; i++) {
didSwap = false;
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
didSwap = true;
}
}

if (didSwap == false) {
break;
}

System.out.println(Arrays.toString(arr));

}

}

private static void swap(int[] arr, int index1, int index2) {
int tempValue = arr[index1];
arr[index1] = arr[index2];
arr[index2] = tempValue;
}

// 排序执行结果

[8, 7, 6, 5, 4, 3, 2, 1, 0, 9]
[7, 6, 5, 4, 3, 2, 1, 0, 8, 9]
[6, 5, 4, 3, 2, 1, 0, 7, 8, 9]
[5, 4, 3, 2, 1, 0, 6, 7, 8, 9]
[4, 3, 2, 1, 0, 5, 6, 7, 8, 9]
[3, 2, 1, 0, 4, 5, 6, 7, 8, 9]
[2, 1, 0, 3, 4, 5, 6, 7, 8, 9]
[1, 0, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

快速排序

直接插入排序

shell排序

直接选择

堆排序

归并排序

基数排序

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: