当前位置: 面试刷题>> 摆动排序问题Ⅰ (经典算法题500道)


### 题目描述补充 摆动排序问题Ⅰ:给定一个整数数组 `nums`,要求将该数组重新排序,使得数组变为摆动序列。摆动序列是一个数组,其中每个元素都严格大于相邻元素(对于位置 `i` 的元素,当 `i > 0` 时 `nums[i] > nums[i-1]`,且当 `i < nums.length - 1` 时 `nums[i] < nums[i+1]`),或者每个元素都严格小于相邻元素(对于位置 `i` 的元素,当 `i > 0` 时 `nums[i] < nums[i-1]`,且当 `i < nums.length - 1` 时 `nums[i] > nums[i+1]`)。 完成这个任务,你只需将数组重新排序,使得任意相邻元素之间满足上述条件之一即可,无需保证整个数组是严格递增或递减的。如果有多种方法,你可以返回任意一种。 ### 示例 给定数组 `nums = [3, 5, 2, 1, 6, 4]`,一个可能的摆动序列是 `[3, 1, 5, 4, 6, 2]` 或 `[5, 3, 1, 6, 2, 4]`。 ### PHP 示例代码 ```php function wiggleSort($nums) { $n = count($nums); sort($nums); // 先对数组进行排序 // 反转后半部分数组,实现交错排列 for ($i = 0; $i < floor($n / 2); $i++) { $temp = $nums[$i]; $nums[$i] = $nums[$n - $i - 1]; $nums[$n - $i - 1] = $temp; } // 如果数组长度为奇数,则中间元素已经位于正确的位置,无需调整 // 对于偶数长度的数组,上述反转已经完成了交错排列 } // 示例用法 $nums = [3, 5, 2, 1, 6, 4]; wiggleSort($nums); print_r($nums); ``` ### Python 示例代码 ```python def wiggleSort(nums): nums.sort() # 先排序 mid = (len(nums) - 1) // 2 # 反转后半部分(不包括中间元素,如果数组长度为奇数) for i in range(mid, len(nums) - 1, 1): nums[i], nums[len(nums) - 1 - (i - mid)] = nums[len(nums) - 1 - (i - mid)], nums[i] # 示例用法 nums = [3, 5, 2, 1, 6, 4] wiggleSort(nums) print(nums) ``` ### JavaScript 示例代码 ```javascript function wiggleSort(nums) { nums.sort((a, b) => a - b); // 先排序 const n = nums.length; const mid = Math.floor((n - 1) / 2); // 反转后半部分(不包括中间元素,如果数组长度为奇数) for (let i = mid, j = n - 1; i < j; i++, j--) { [nums[i], nums[j]] = [nums[j], nums[i]]; } } // 示例用法 const nums = [3, 5, 2, 1, 6, 4]; wiggleSort(nums); console.log(nums); ``` ### 码小课提示 以上代码示例提供了摆动排序问题Ⅰ的解法,即将数组排序后反转后半部分(不包括中间元素,如果数组长度为奇数),从而实现摆动序列。码小课网站中有更多相关内容分享给大家学习,包括算法原理、进阶题目及解析等,欢迎访问学习。
推荐面试题