Java的堆排序、快速排序、归并排序怎么实现
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本文小编为大家详细介绍"Java的堆排序、快速排序、归并排序怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"Java的堆排序、快速排序、归并排序怎么实现"文章能帮助大家解决疑惑,下面跟着小编的
千家信息网最后更新 2025年11月07日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 (child arr[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) { Stack stack =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;gap arr.length){ mid =arr.length; } if (right>arr.length){ right=arr.length; } merge(arr,left,mid,right); } } System.out.println(Arrays.toString(arr)); } 读到这里,这篇"Java的堆排序、快速排序、归并排序怎么实现"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
排序
复杂
复杂度
递归
元素
文章
时间
稳定性
空间
内容
时候
子树
妥当
两个
个数
区间
只有
基准
基准值
大堆
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发工程师面试常见问题
pc我的世界服务器创建
小学信息技术网络安全
数据库list作用
无线路由服务器无响应
网络安全第41条
h5软件开发是做什么
字库软件开发有限公司
服务器发送信息
网络安全 三分设备3
网络安全常识一书推荐理由
wincc数据库怎么导出
psql 数据库
服务器出现404页面怎么办
目前的数据库
郑州银行全国网络安全挑战赛
数据库的查询实训心得
黄石串口服务器怎么收费
限制账户只能访问指定数据库
廊坊市网络安全竞赛活动
服务器处理器U和路解释
深圳金融软件开发上市公司
网络安全防护边界
2017网络安全宣传月
腾讯软件开发师证书
rh2288v3服务器升级
网络安全主要存在问题
全国有多少个网络安全公司
软件开发过程中的模型
数据库查询语句注释格式