解题思路
- 先根据arr2对arr1进行排序
- arr1的元素是要比arr2多或是相等的,根据arr2排完序后arr1后半段会有一段无序的小尾巴
- 再对小尾巴进行排序
代码
func relativeSortArray(arr1 []int, arr2 []int) []int { if arr1 == nil || len(arr1) == 1 { return arr1 } l1 := len(arr1) l2 := len(arr2) n := 0 // 已经排好序的不在参与排序 for i := 0; i < l2 ; i++ { m := i + n for j := m; j < l1; j++ { if arr2[i] == arr1[j] { swap(arr1,m,j) //break m++ n++ } } n-- } //fmt.Printf("%v",arr1) //fmt.Println(n) // 选择排序 sort(arr1,l1,l2 + n) return arr1 } // x不能等于Y //func swap(arr1 []int,x, y int) { // arr1[x] = arr1[x] ^ arr1[y] // arr1[y] = arr1[x] ^ arr1[y] // arr1[x] = arr1[x] ^ arr1[y] //} func swap(arr1 []int,x, y int) { temp := arr1[x] arr1[x] = arr1[y] arr1[y] = temp } // 让数组在[l2,l1]之间排序 func sort(arr []int,l1,l2 int) { for i := l2; i < l1 - 1; i++ { min := i for j := i + 1 ; j < l1; j++ { if arr[min] > arr[j] { min = j } } swap(arr,i,min) } }