java如何实现摆动排序

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


本文标题:java如何实现摆动排序
分享路径:http://scyanting.com/article/jpdoes.html