我理解如何按升序和降序排序array
,但我正在尝试创建一个特定的模式。例如,我有一个随机顺序的array
。我如何在模式中对此array
进行排序? “最小,最大,第二小,第二大,第三大,第三大......”等等。任何想法?
int[] pattern = {8, 6, 1, 2, 3, 80, 56};
//这是开始
public class Test2 {
public static void main(String[] args) {
int[] array = {1,4,2,6,9,3,65,77,33,22};
for (int i = 0; i < array.length; i++) {
System.out.print(" " + array[i]);
}
wackySort(array);
}
//This sorts the array
public static void wackySort(int[] nums) {
int sign = 0;
int temp = 0;
int temp2 = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length -1; j++) {
if (nums[j] > nums[j+1]) {
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
System.out.println();
int firstPointer = 0;
int secondPointer = nums.length -1;
int[] newarray = new int[nums.length];
for (int i = 0; i < nums.length; i+=2) {
newarray[i] = nums[firstPointer++];
newarray[i] = nums[secondPointer--];
}
for (int i = 0; i < newarray.length; i++) {
System.out.print(" " + newarray[i]);
}
}
}
答案 0 :(得分:5)
看起来像家庭作业。这是一个简单的提示
第1步:按升序对数组进行排序
{1, 2, 3, 6, 8, 56, 80};
第2步:分配一个大小相同的新数组
第3步遍历第一个数组,两个计数器。一开始一分,最后另一分。现在在新数组中分配第一个计数器的数据然后将计数器增加一个。接下来分配最后一个计数器的数据并将其减一。
int firstPointer = 0;
int secondPointer = nums.length - 1;
int[] newarray = new int[nums.length];
int i = 0;
for (i = 0; i < nums.length-1; i += 2) {
newarray[i] = nums[firstPointer++];
newarray[i+1] = nums[secondPointer--];
}
if(i<nums.length-1)
newarray[i] = nums[firstPointer++];
答案 1 :(得分:1)
你可以先排序,然后从第二个元素开始,与最后一个元素交换等等。
答案 2 :(得分:1)
尝试使用列表而不是数组。
public <T extends Comparable<? super T>> List<T> interleave(List<T> list) {
final int size = list.size();
final List<T> sorted = new ArrayList<T>(list);
Collections.sort(sorted); // Now, it's sorted.
final List<T> reversed = new ArrayList<T>(sorted);
Collections.reverse(reversed); // Now, it's reverse sorted.
final List<T> interleaved = new ArrayList<>();
for (int i= 0; i < size/2; ++i) {
interleaved.add(sorted.get(i));
interleaved.add(reversed.get(i));
}
if (size % 2 == 1) {
interleaved.add(sorted.get(size/2 + 1));
}
return interleaved;
}
答案 3 :(得分:0)
也许您可以(或必须)先对数组进行排序,然后将元素放入您的订单中。 实现Comparable或Comparator,以便您可以定义数组中元素的排序方式。以下页面可能有所帮助:enter link description here
答案 4 :(得分:0)
此代码执行古怪的排序:
public static void wackySort(int[] nums) {
Arrays.sort(nums);
int size = nums.length;
int[] result = new int[size];
for (int i = 0; i < size / 2; i++) {
result[i * 2] = nums[i];
result[i * 2 + 1] = nums[size - 1 - i];
}
// one extra copy is required to handle both odd and even array sizes
result[size - 1] = nums[size / 2];
System.arraycopy(result, 0, nums, 0, size);
}
这是一些测试代码:
public static void main(String[] args) {
int[] oddSize = { 8, 6, 1, 2, 3, 80, 56 };
wackySort(oddSize);
System.out.println(Arrays.toString(oddSize));
int[] evenSize = { 8, 6, 1, 2, 3, 80, 56, 5 };
wackySort(evenSize);
System.out.println(Arrays.toString(evenSize));
}
输出:
[1, 80, 2, 56, 3, 8, 6]
[1, 80, 2, 56, 3, 8, 5, 6]