逆序排序
逆序排列的核心思想是交换数组的首尾元素,直到中间位置。
具体步骤
- 初始化两个指针,一个指向数组的开头,另一个指向数组的末尾。
- 交换这两个指针所指向的元素。
- 将前面的指针向后移动,后面的指针向前移动。
- 重复上述步骤,直到两个指针相遇或交错。
一维数组的逆序
方法一:
public class Demo01 {
public static void main(String[] args) {
int[] numbers={1,2,3,4,5,6};
int[] num=new int[numbers.length];
for(int i=0;i<numbers.length;i++) {
num[i]=numbers[numbers.length-i-1];
}
System.out.println(Arrays.toString(numbers));
}
}
方法二:
public void numbers() {
int temp = 0;
for (int i = 0; i < numbers.length / 2; i++) {
temp = numbers[i];
numbers[i] = numbers[numbers.length - i - 1];
numbers[numbers.length - i - 1] = temp;
}
}
方法三:利用StringBuilder
public class Main {
public static void main(String[] args) {
String str = "Hello World";
StringBuilder sb = new StringBuilder(str);
System.out.println("反序输出: " + sb.reverse().toString());
}
}
运行结果
二维数组的逆序
//逆序遍历
public class work2 {
public static void main(String[] args) {
int[][] array= {
{1,2,3},
{4,5,6},
{7,8,9}
};
int dex=0;
for(int i=array.length-1;i>=0;i--) {
for(int k=array[i].length-1;k>=0;k--) {
System.out.print(array[i][k]+"\t");
}
System.out.println();
}
}
运行结果
练习:
假设有一个长度为5的数组,数组元素通过键盘录入,如下所示:
int[] arr = {1,3,-1,5,-2}
要求:
创建一个新数组newArr[],新数组中元素的存放顺序与原数组中的元素逆序,并且如果原数组中的元素值小于0,
在新数组中按0存储。最后输出原数组和新数组中的内容
public class Test6 {
public static void main(String[] args) {
// 定义原数组
int[] arr = new int[5];
Scanner sc = new Scanner(System.in);
// 采用键盘录入给数组的每一个元素赋值
System.out.println("请输入5个整数:");
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
System.out.println("原数组内容:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
// arr : 1 3 -1 5 -2
// 定义新数组
int[] newArr = new int[arr.length];
// 模拟新数组的索引
int index = 0;// index = 3
for (int i = arr.length - 1; i >= 0; i--) {// i = 1
if (arr[i] < 0) {
newArr[index] = 0;
} else {
newArr[index] = arr[i];
}
index++;
}
System.out.println("新数组内容:");
for (int i = 0; i < newArr.length; i++) {
System.out.print(newArr[i] + " ");
}
}
}
输出结果:
请输入5个整数:
5
3
7
9
5
原数组内容:
5 3 7 9 5
新数组内容:
5 9 7 3 5