当前位置: 面试刷题>> 摆动排序问题Ⅰ (经典算法题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);
```
### 码小课提示
以上代码示例提供了摆动排序问题Ⅰ的解法,即将数组排序后反转后半部分(不包括中间元素,如果数组长度为奇数),从而实现摆动序列。码小课网站中有更多相关内容分享给大家学习,包括算法原理、进阶题目及解析等,欢迎访问学习。