当前位置: 首页 > 面试题库 >

Java版堆排序[不稳定]

卜飞鸣
2023-03-14
本文向大家介绍Java版堆排序[不稳定]相关面试题,主要包含被问及Java版堆排序[不稳定]时的应答技巧和注意事项,需要的朋友参考一下

堆一般指二叉堆。

复杂度:O(nlogn) - O(nlgn) - O(nlgn) - O(1)[平均 - 最好 - 最坏 - 空间复杂度]

大顶堆实现从小到大的升序排列,小顶堆一般用于构造优先队列

	public void heapSort(int[] a) {
		if (null == a || a.length < 2) {
			return;
		}
		
		buildMaxHeap(a);
		
		for (int i = a.length - 1; i >= 0; i--) {
			int temp = a[0];
			a[0] = a[i];
			a[i] = temp;
			
			adjustHeap(a, i, 0);
		}
	}

	// 建堆
	private void buildMaxHeap(int[] a) {
		int mid = a.length / 2;
		for (int i = mid; i >= 0; i--) {
			adjustHeap(a, a.length, i);
		}
	}
	
	// 递归调整堆
	private void adjustHeap(int[] a, int size, int parent) {
		int left = 2 * parent + 1;
		int right = 2 * parent + 2;
		
		int largest = parent;
		if (left < size && a[left] > a[parent]) {
			largest = left;
		}
		
		if (right < size && a[right] > a[largest]) {
			largest = right;
		}
		
		if (parent != largest) {
			int temp = a[parent];
			a[parent] = a[largest];
			a[largest] = temp;
			adjustHeap(a, size, largest);
		}
	}
 类似资料:
  • 本文向大家介绍Java版快速排序[不稳定]相关面试题,主要包含被问及Java版快速排序[不稳定]时的应答技巧和注意事项,需要的朋友参考一下 原理:分治+递归 复杂度:O(nlgn) - O(nlgn) - O(n^2) - O(1)[平均 - 最好 - 最坏 - 空间复杂度] 栈空间0(lgn) - O(n)

  • 本文向大家介绍Java版选择排序[不稳定]相关面试题,主要包含被问及Java版选择排序[不稳定]时的应答技巧和注意事项,需要的朋友参考一下 原理:每次从无序序列选取最小的 复杂度:O(n^2) - O(n^2) - O(n^2) - O(1)[平均 - 最好 - 最坏 - 空间复杂度]

  • 本文向大家介绍Java版归并排序[稳定]相关面试题,主要包含被问及Java版归并排序[稳定]时的应答技巧和注意事项,需要的朋友参考一下 原理:采用分治法 复杂度:O(nlogn) - O(nlgn) - O(nlgn) - O(n)[平均 - 最好 - 最坏 - 空间复杂度]

  • 本文向大家介绍Java版基数排序[稳定]相关面试题,主要包含被问及Java版基数排序[稳定]时的应答技巧和注意事项,需要的朋友参考一下 原理:分配加收集 复杂度: O(d(n+r)) r为基数d为位数 空间复杂度O(n+r)

  • 本文向大家介绍Java版冒泡排序[稳定]相关面试题,主要包含被问及Java版冒泡排序[稳定]时的应答技巧和注意事项,需要的朋友参考一下 复杂度:O(n^2) - O(n) - O(n^2) - O(1)[平均 - 最好 - 最坏 - 空间复杂度]

  • 本文向大家介绍Java版插入排序[稳定]相关面试题,主要包含被问及Java版插入排序[稳定]时的应答技巧和注意事项,需要的朋友参考一下 适用于小数组,数组已排好序或接近于排好序速度将会非常快 复杂度:O(n^2) - O(n) - O(n^2) - O(1)[平均 - 最好 - 最坏 - 空间复杂度]