温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java如何实现摆动排序

发布时间:2022-01-17 09:21:02 阅读:162 作者:小新 栏目:大数据
Java开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要为大家展示了“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如何实现摆动排序”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/1010616/blog/4440179

AI

开发者交流群×