题目:
给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,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
}