File tree Expand file tree Collapse file tree 1 file changed +5
-11
lines changed Expand file tree Collapse file tree 1 file changed +5
-11
lines changed Original file line number Diff line number Diff line change 33
44![ ] ( https://github.com/xbox1994/2018-Java-Interview/raw/master/images/quicksort.gif )
55
6- 首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
7-
8- 不稳定,如果最小的值在最后面,那么在第一次排序就被放到第一位,后面有与该值相等的元素也不会交换。
6+ 首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序
97
108最好情况:每次划分过程产生的区间大小都为n/2,一共需要划分log<sub >2</sub >n次,每次需要比较n-1次,O(nlog<sub >2</sub >n)
119最坏情况:每次划分过程产生的两个区间分别包含n-1个元素和1个元素,一共需要划分n-1次,每次最多交换n-1次,这就是冒泡排序了,O(n2)
1210
1311## 堆排序
1412
15- 堆可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示
16- 堆排序就是把最大堆堆顶的最大数取出,将剩余的堆继续调整为最大堆,再次将堆顶的最大数取出,这个过程持续到剩余数只有一个时结束
17-
13+ 1 . 根据初始数组去构造初始堆(构建一个完全二叉树,保证所有的父结点都比它的孩子结点数值大)。
14+ 2 . 每次交换第一个和最后一个元素,输出最后一个元素(最大值),然后把剩下元素重新调整为大根堆。
15+
1816![ ] ( https://github.com/xbox1994/2018-Java-Interview/raw/master/images/j11.png )
1917
2018![ ] ( https://github.com/xbox1994/2018-Java-Interview/raw/master/images/heapsort.gif )
2119
22- 不稳定,27 27 12 3,第一次建堆把第一个27放到最后了,第二次就把第二个27放到第一个27前面了
23-
24- 堆排序过程的时间复杂度是O(nlog<sub >2</sub >n)。因为建堆的时间复杂度是O(n);调整堆的时间复杂度是log<sub >2</sub >n,所以堆排序的时间复杂度是O(nlog<sub >2</sub >n)
25-
26- 欢迎光临[ 91Code] ( http://www.91code.info/?utm_source=github&utm_medium=github ) ,发现更多技术资源~
20+ 堆排序过程的最好和最坏时间复杂度是O(nlog<sub >2</sub >n)
You can’t perform that action at this time.
0 commit comments