Java的堆排序、快速排序、归并排序怎么实现
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,本文小编为大家详细介绍"Java的堆排序、快速排序、归并排序怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"Java的堆排序、快速排序、归并排序怎么实现"文章能帮助大家解决疑惑,下面跟着小编的
千家信息网最后更新 2025年01月17日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安全错误
数据库的锁怎样保障安全
有关网络安全的相关知识
国家网络安全相关的人
宜阳软件开发选哪家
数据库完整性约束是什么意思
网络技术公司缴纳什么税
网络安全疫情
可靠的网络安全型号
论述网络技术对教育机构的影响
论文数据库的引用格式
国家网络安全宣传周石家庄
测试服务器失败请检查网络
手机芯片和服务器级别
美康软件开发有限公司
证券期货网络安全吗
软件开发合同开票抵税
外国软件开发经典书籍
软件开发技术施工方案提交时间
学校的网络安全专员有寒暑假
全能扫描王软件开发
山东腾纵软件开发局
四川 网络安全
学校网络安全教育宣传简报
网络安全福建
通信互联网科技公司
2020强网杯网络安全大赛
网络技术门户
网络安全责任书22条
单位网络安全操作规程
壁纸软件开发商
网络安全架构解析