링크 : HTTPS : //www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593
제목 : 배열 번호의 순서를 조절하는 기능을 실현하기 위해, 정수의 배열을 입력하도록 배열의 전반부, 모든 짝수 어레이의 후반부에 위치하고 있으며, 홀수 및 짝수 짝수 및 짝수 사이되도록 모든 홀수 부분 상대 위치 변경.
아이디어 : 공간에 대한 시간조차 보존의 배열 연은 원래 배열의 꼬리에 원래 배열, 임시 배열에 저장되어있는 짝수 왼쪽에 이상한 움직임, 그리고 마지막으로, 심지어 임시 배열을 검사합니다.
예를 들면
광원 어레이 {3,4,5,7,8,2,9}
시작은 이것이다 :
왼쪽에서 오른쪽으로 스캔, 첫 번째 숫자는 (실제 장소) 삽입 포인터로 (3)를 넣어 세 홀수이며, 그리고 오른쪽에 삽입 포인터 이동, 주사 포인터는 오른쪽으로 이동한다.
그래서 :
이제 4 스캔, 짝수, 임시 배열에 넣어, 앞으로 스캔 포인터입니다.
그래서 :
현재 스캔 5, 5에 삽입 포인터를 배치하고 오른쪽에 삽입 포인터를 이동 홀수 주사 포인터는 오른쪽으로 이동한다.
그래서 :
7 스캔 홀수 7에 삽입 포인터를 배치하고 오른쪽에 삽입 포인터를 이동 주사 포인터는 오른쪽으로 이동한다.
그래서 :
이제 8 스캔, 짝수, 임시 배열에 넣어, 앞으로 스캔 포인터.
그래서 :
그리고 :
마지막으로 :
지금까지, 왼쪽은 홀수를 완료하고도 선출했다.
원래의 배열에 임시 배열하더라도 다음 일 수있다.
코드
1 /** 2 * @author yuan 3 * @version 0.1 4 * @date 2019/6/6 5 */ 6 public class ReOrderArray { 7 8 public static void print(int[] array) { 9 for (int i = 0; i < array.length; i++) { 10 System.out.print(array[i]); 11 if (i == array.length - 1) { 12 System.out.println(); 13 } else { 14 System.out.print(" "); 15 } 16 } 17 } 18 19 public static void reOrderArray(int[] array) { 20 // 保存偶数 21 int[] temp = new int[array.length]; 22 // 当前偶数数量 23 int count = 0; 24 // 当前填入位置,第一轮for循环用于奇数左移,第二轮用于填入偶数 25 int pos = 0; 26 for (int i = 0; i < array.length; i++) { 27 if ((array[i] & 1) == 0) { 28 temp[count++] = array[i]; 29 } else { 30 array[pos++] = array[i]; 31 } 32 } 33 for (int i = 0; i < count; i++) { 34 array[pos++] = temp[i]; 35 } 36 } 37 38 public static void main(String[] args) { 39 int[] array = new int[]{3, 4, 5, 7, 8, 2, 9}; 40 print(array); 41 reOrderArray(array); 42 print(array); 43 } 44 }