Java的堆排序、快速排序、归并排序怎么实现
发表于:2024-10-08 作者:千家信息网编辑
千家信息网最后更新 2024年10月08日,本文小编为大家详细介绍"Java的堆排序、快速排序、归并排序怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"Java的堆排序、快速排序、归并排序怎么实现"文章能帮助大家解决疑惑,下面跟着小编的
千家信息网最后更新 2024年10月08日Java的堆排序、快速排序、归并排序怎么实现
本文小编为大家详细介绍"Java的堆排序、快速排序、归并排序怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"Java的堆排序、快速排序、归并排序怎么实现"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
堆排序
时间复杂度:0(N*log(N))
空间复杂度:0(1)
稳定性:不稳定
private static void heapSort(int[] arr) { //建堆 crearHeap(arr); for (int i = 0; i < arr.length-1; i++) { int heapSize=arr.length-i; swap(arr,heapSize-1,0); heapSize--; shiftDown(arr,heapSize,0); } System.out.println(Arrays.toString(arr)); } private static void crearHeap(int[] arr) { // 从后往前遍历(右边非叶子节点开始), 依次进行向下调整 for (int i = (arr.length-1-1)/2; i >=0 ; i--) { shiftDown(arr,arr.length,i); } } //向下调整,形成大堆 private static void shiftDown(int[] arr, int size, int i) { int parent = i; int child = parent*2+1; while (childarr[child]){ child=child+1; } if (arr[child]>arr[parent]){ swap(arr,child,parent); }else { break; } parent=child; child=parent*2+1; } } //交换 private static void swap(int[] arr, int child, int parent) { int tmp =arr[child]; arr[child] =arr[parent]; arr[parent]=tmp; }
快速排序
时间复杂度:O(N^ logN) 最坏的时候O(N^2) 和基准值密切相关
空间复杂度:0(logN) 最坏的时候O(N)
稳定性:不稳定
递归
private static void quick(int[] arr) { quickSortHelper(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } private static void quickSortHelper(int[] arr, int left, int right) { if (left>=right){ //区间只有一个元素,或者零个元素 return; } int index = partition(arr,left,right); quickSortHelper(arr,left,index-1); quickSortHelper(arr,index+1,right); } private static int partition(int[] arr, int left, int right) { int i=left; int j=right; int baseValue=arr[right]; while (i=baseValue){ j--; } if (i 非递归
public static void quickSortByLoop(int[] arr) { Stackstack =new Stack<>(); stack.push(0); stack.push(arr.length-1); while (!stack.isEmpty()){ int right = stack.pop(); int left = stack.pop(); if (left>=right){ continue; } int index = partition(arr,left,right); //右子树 stack.push(index+1); stack.push(right); //左子树 stack.push(left); stack.push(index-1); } System.out.println(Arrays.toString(arr)); } private static int partition(int[] arr, int left, int right) { int baseValue =arr[right]; int i =left; int j =right; while (i =baseValue){ j--; } if (i 归并排序
时间复杂度:O(NlogN)
空间复杂度:O(N) 如果是链表,可以为O(1)
稳定性:稳定
递归
public static void mergeSort(int[] arr){ mergeSortHelper(arr,0,arr.length); System.out.println(Arrays.toString(arr)); } private static void mergeSortHelper(int[] arr, int left, int right) { if (right-left<=1){ return; } int mid = (right+left)/2; mergeSortHelper(arr,left,mid); mergeSortHelper(arr,mid,right); merge(arr,left,mid,right); } private static void merge(int[] arr, int left, int mid, int right) { int cur1 =left; int cur2 =mid; //两个数组合并后的结果 int[] output=new int[right-left]; int outputIndex=0; while (cur1非递归
public static void mergeSortByLoop(int[] arr){ // gap 当前每个组中的元素个数. for (int gap =1;gaparr.length){ mid =arr.length; } if (right>arr.length){ right=arr.length; } merge(arr,left,mid,right); } } System.out.println(Arrays.toString(arr)); } 读到这里,这篇"Java的堆排序、快速排序、归并排序怎么实现"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
排序
复杂
复杂度
递归
元素
文章
时间
稳定性
空间
内容
时候
子树
妥当
两个
个数
区间
只有
基准
基准值
大堆
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
熊猫网络技术有限公司
瘦客户机服务器搭建
性价比高的游戏服务器
判断sql数据库
吉林年年丰收网络技术有限公司
深圳服务器机柜生产厂
八一电大数据库应用技术试题
修改代理服务器网址
sl会员商城系统数据库
管理机较之串口服务器优势
软件开发具体指导
北京综合软件开发介绍
数据库网页查询系统源码
如何设计数据库取货码的表格
壹贰叁互联网科技有限公司
计算机网络技术与应用施荣华
浙江网络安全培训考试
如何对数据库表进行加密
黑板报模板网络安全霸气
我的世界服务器指令大全
虚拟主机数据库怎么导入
上古世纪数据库
网络安全 重要敏感期
智能软件开发专业简介
软件开发人员成本预算
家用电脑搭建游戏私人服务器
服务器怎么还原系统
计算机网络技术英文摘要
如何对数据库表进行加密
徐州轩翰网络技术有限公司