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

Java版归并排序[稳定]

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

原理:采用分治法

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

// 排序
	public void mergeSort(int[] a, int low, int high) {

		int mid = (low + high) / 2;
		if (low < high) {
			// 左边排序
			mergeSort(a, low, mid);
			// 右边排序
			mergeSort(a, mid + 1, high);
			// 有序序列合并
			merge(a, low, mid, high);
		}
	}
	
	// 合并
	private void merge(int a[], int low, int mid, int high) {
		// 临时数组
		int[] temp = new int[high - low + 1];
		// 左指针
		int i = low;
		// 右指针
		int j = mid + 1;
		// 临时数组索引
		int k = 0;
		
		while (i <= mid && j <= high) {
			if (a[i] < a[j]) {
				temp[k++] = a[i++];
			} else {
				temp[k++] = a[j++];
			}
		}
		
		// 把左边剩余的数移入数组  
		while (i <= mid) {
			temp[k++] = a[i++];
		}
		
		// 把右边剩余的数移入数组  
		while (j <= high) {
			temp[k++] = a[j++];
		}
		
		// 注意这里是low + t
		for (int t = 0; t < temp.length; t++) {
			a[low + t] = temp[t];
		}
	}
 类似资料:
  • 本文向大家介绍Java版基数排序[稳定]相关面试题,主要包含被问及Java版基数排序[稳定]时的应答技巧和注意事项,需要的朋友参考一下 原理:分配加收集 复杂度: O(d(n+r)) r为基数d为位数 空间复杂度O(n+r)

  • 本文向大家介绍Java版堆排序[不稳定]相关面试题,主要包含被问及Java版堆排序[不稳定]时的应答技巧和注意事项,需要的朋友参考一下 堆一般指二叉堆。 复杂度:O(nlogn) - O(nlgn) - O(nlgn) - O(1)[平均 - 最好 - 最坏 - 空间复杂度] 大顶堆实现从小到大的升序排列,小顶堆一般用于构造优先队列

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

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

  • 本文向大家介绍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)[平均 - 最好 - 最坏 - 空间复杂度]