77范文网 - 专业文章范例文档资料分享平台

java中常用的七大排序算法(2)

来源:网络收集 时间:2019-03-28 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

堆排序的时间复杂度和空间复杂度分别是O(nlogn)和O(1)。 /**

* @paramint[] 未排序数组 * @return int[] 排完序数组 */

publicint[] sortHeap(int[] array) { buildHeap(array);// 构建堆 int n = array.length; inti = 0;

for (i = n - 1; i>= 1; i--) { swap(array, 0, i); heapify(array, 0, i); }

return array; }

private void buildHeap(int[] array) { int n = array.length;// 数组中元素的个数 for (inti = n / 2 - 1; i>= 0; i--) heapify(array, i, n);

}

private void heapify(int[] A, intidx, int max) {

int left = 2 * idx + 1;// 左孩子的下标(如果存在的话) int right = 2 * idx + 2;// 左孩子的下标(如果存在的话) int largest = 0;// 寻找3个节点中最大值节点的下标 if (left < max && A[left] > A[idx]) largest = left; else

largest = idx;

if (right < max && A[right] > A[largest]) largest = right; if (largest != idx) {

swap(A, largest, idx); heapify(A, largest, max); } }

// 建堆函数,认为【s,m】中只有 s

// 对应的关键字未满足大顶堆定义,通过调整使【s,===================================================== public static void heapAdjust(int[] array, int s, int m) { // 用0下标元素作为暂存单元 array[0] = array[s];

// 沿孩子较大的结点向下筛选

m】成为大顶堆for (int j = 2 * s; j <= m; j *= 2) {

// 保证j为较大孩子结点的下标,j < m 保证 j+1 <= m ,不越界 if (j < m && array[j] < array[j + 1]) { j++; }

if (!(array[0] < array[j])) { break; }

// 若S位较小,应将较大孩子上移 array[s] = array[j];

// 较大孩子的值变成S位的较小值,可能引起顶堆的不平衡,故对其所在的堆进行筛选 s = j; }

// 若S位较大,则值不变;否则,S位向下移动至2*s、4*s、。。。 array[s] = array[0];

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库java中常用的七大排序算法(2)在线全文阅读。

java中常用的七大排序算法(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/549048.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: