常见排序算法概述
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排序
直接选择
堆排序
归并排序
基数排序
相关文章推荐
- 几种常见的排序算法概述
- js常见的排序算法
- 常见排序算法的复杂度以及稳定性
- java常见排序算法
- 算法导论习题:寻找第2小元素&&关于常见排序算法的稳定性分析和结论
- 常见排序算法比较
- 常见的排序算法
- C语言中冒泡法、选择法、插入法三种常见排序算法分析
- 几种常见的排序算法
- 《大话数据结构》常见排序算法总结(一)
- 几种常见的排序算法
- JavaScript常见的排序算法(一)
- 几种常见排序算法的JavaScript实现
- 常见排序算法总结 .
- 几种常见排序算法_PHP实现
- 几种常见的排序算法---插入排序
- 面试准备之常见排序算法的总结!
- 11. 常见的有哪几种排序算法,试比较其时间复杂度,以及是否稳定,及各自使用的情形
- 常见的排序算法的比较
- 常见的排序算法,Java实现