1122.数组的相对排序

81 阅读1分钟

题目:
给你两个数组,arr1 和 arr2arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。

对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
算法:
快排是 quicksort(arr, start, pivot - 1) quicksort(arr, pivot + 1, end)

func relativeSortArray(arr1 []int, arr2 []int) []int {
	pos := 0
	for i := range arr2 {
		for j := pos; j < len(arr1); j ++ {
			if arr1[j] == arr2[i] {
				arr1[j], arr1[pos] = arr1[pos], arr1[j]
				pos ++
			}
		}
	}
	quicksort(arr1, pos, len(arr1) - 1)
	return arr1
}

func quicksort(arr []int, start, end int) {
	if start >= end {
		return
	}
	pivot := partition(arr, start, end)
	quicksort(arr, start, pivot - 1)
	quicksort(arr, pivot + 1, end)
}

func partition(arr []int, start, end int) int {
	
	if start == end {
		return start
	}
	left, right := start, end
	midVal := arr[right]
	for i := left; i < right; i ++ {
		if arr[i] <  midVal {
			arr[left], arr[i] = arr[i], arr[left]
			left ++
		} 
	}
	arr[left], arr[right] = arr[right], arr[left]
	return left
}