这篇文章主要为大家展示了“java如何实现摆动排序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java如何实现摆动排序”这篇文章吧。
给定一个无序的数组 nums
,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]...
的顺序。
示例 1:
输入: 输出: 一个可能的答案是
示例 2:
输入: 输出: 一个可能的答案是
答案:
1public void wiggleSort(int[] nums) {
2 int n = nums.length, m = (n + 1) >> 1;
3 int[] copy = Arrays.copyOf(nums, n);
4 Arrays.sort(copy);
5 for (int i = m - 1, j = 0; i >= 0; i--, j += 2)
6 nums[j] = copy[i];
7 for (int i = n - 1, j = 1; i >= m; i--, j += 2)
8 nums[j] = copy[i];
9}
解析:
先把nums复制到另一个数组copy中,然后再对copy数组进行排序,这里是先把copy数组的前半部分从后往前每隔一个插入到数组nums下标的偶数位中(下标从0开始),然后再把数组copy的后半部分从后往前每隔一个插入到数组nums下标的奇数位中,因为数组copy是排序过的,所以数组nums中的值都会是下标奇数位上的值大于他的前一个和后一个,同理下标是偶数位上的值都会小于他的前一个和后一个值。我们还可以换种写法
1public void wiggleSort(int[] nums) {
2 int[] copy = Arrays.copyOf(nums, nums.length);
3 Arrays.sort(copy);
4 int n = nums.length;
5 int left = (n + 1) / 2 - 1; // 中间的索引
6 int right = n - 1; // 最大值的索引
7 for (int i = 0; i < nums.length; i++) {
8 if (i % 2 == 1) {
9 nums[i] = copy[right];
10 right--;
11 } else {
12 nums[i] = copy[left];
13 left--;
14 }
15 }
16}
写法上虽然有一点点的差别,但原理还是一样的。
以上是“java如何实现摆动排序”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。