排序算法之堆排序
堆排序原理 堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。
第一步 构造初始堆
假设给定无序序列结构如下
此时我们从最后一个非叶子结点开始(叶结点自然不用调整,第一个非叶子结点 arr.length/2-1=5/2-1=1,也就是下面的6结点),从左至右,从下至上进行调整。
找到第二个非叶节点4,由于[4,9,8]中9元素最大,4和9交换。
这时,交换导致了子根[4,5,6]结构混乱,继续调整,[4,5,6]中6最大,交换4和6。
第二步 得到完整的排序序列将堆顶元素与末尾元素进行交换,使末尾元素最大。然后继续调整堆,再将堆顶元素与末尾元素交换,得到第二大 ...
排序算法之二分法排序
说明 因为平时不是很常用二分法排序,但是有时候会有要求使用二分法排序,所以就把板子放在这里可以直接参考,照着这个样子可以进行适当的改动。
代码 这里用一个整数数组进行示范,比较清晰明了。
1234567891011121314151617181920212223int[] arr = {49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 1}; for (int i = 1; i < arr.length; i++) { int temp = arr[i]; //要插入的第i个元素 int low = 0; int high = i - 1; //插入目标元素的前 i-1 个元素 ...