양수 의 상대 순 서 를 바 꾸 지 않 고 다시 배열 합 니 다.

1247 단어 알고리즘
제목 설명 정렬 되 지 않 은 정수 배열 을 지정 합 니 다. 배열 의 요 소 는 양수 도 있 고 음수 도 있 습 니 다. 배열 의 요 소 를 다시 배열 하여 음수 가 양수 앞 에 있 고 원래 의 양수 와 음수 간 의 상대 적 인 순 서 를 바 꾸 지 않도록 해 야 합 니 다.예 를 들 어 입력 이 {1, 7, - 5, 9, - 12, 15} 이면 출력 은 {- 5, - 12, 1, 7, 9, 15} 입 니 다.요구 시간 복잡 도 는 O (n) 이 고 공간 복잡 도 는 O (1) 이다.
사고의 방향 묘사. 상대 적 인 순 서 를 바 꾸 지 않 기 때문에 이전 문자열 에서 문자 가 이동 하 는 코드 를 참고 하여 다음 과 같이 구체 적 으로 실현 할 수 있 습 니 다.
import java.util.Scanner;

public class Huawei830 {
	
	public static void swap(int num[], int i, int j){
		int tmp = num[i];
		num[i] = num[j];
		num[j] = tmp;
	}
	
	/**
	 *           O(1) ,        O(n)
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		while (scanner.hasNext()) {
			int n = scanner.nextInt();
			int num[] = new int[n];
			
			for(int i = 0; i < n; i++){
				num[i] = scanner.nextInt();
			}
			
			int i = 0;
			int j = 0;
			int pos = 0;
			while(i <= n-1){
				if(num[i] < 0){
					swap(num, i, j);
					pos = j;
					while(pos < i){
						++pos;
						swap(num, i, pos);
					}
					++j;
				}
				++i;
			}
			
			for(i = 0; i < n; i++){
				System.out.print(num[i]+" ");
			}
			System.out.println();
			
		}
	}

}

좋은 웹페이지 즐겨찾기