思路就是利用 偶数指针 和 奇数指针
每次把最后位置的数 按照偶数或者奇数 每次交换到合适的位置
当两个指正有一个跑出去 都保证了 有效的结果
不过我有一个疑问 就是我通过异或来修改两个数时 ac 6/10 表示很不理解
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] s = reader.readLine().split(" ");
int m = Integer.valueOf(s[0]);
int[] arr = new int[m];
s = reader.readLine().split(" ");
for (int i = 0; i < m; i++) {
arr[i] = Integer.valueOf(s[i]);
}
sort1(arr);
for (int i = 0; i < m; i++)
System.out.print(arr[i] + " ");
}
static public void sort1(int[] arr) {
int N = arr.length;
int even = 0;
int odd = 1;
int end = arr.length - 1;
while (even <= end && odd <= end) {
//偶数
if((arr[end] & 1)==0){
swap(arr,end,even);
even += 2;
}else{
swap(arr,end,odd);
odd += 2;
}
}
}
static void swap(int[] arr,int i,int j){
// 为什么这个不能ac????
// arr[i] = arr[i] ^ arr[j];
// arr[j] = arr[i] ^ arr[j];
// arr[i] = arr[i] ^ arr[j];
int tmp =arr[i];
arr[i] = arr[j];
arr[j] = tmp ;
}
}


京公网安备 11010502036488号