티스토리 뷰

알고리즘/C++

[C++] Special Sort (버블 정렬)

지휘리릭 2020. 2. 24. 16:51


N개의 정수가 입력되면 당신은 입력된 값을 정렬해야 한다.음의 정수는 앞쪽에 양의정수는 뒷쪽에 있어야 한다. 또한 양의정수와 음의정수의 순서에는 변함이 없어야 한다.
▣ 입력설명 : 첫 번째 줄에 정수 N(5<=N<=100)이 주어지고, 그 다음 줄부터 음수를 포함한 정수가 주어진다. 숫자 0은 입력되지 않는다.
▣ 출력설명 : 정렬된 결과를 출력한다.

#include<stdio.h>

int main() {
	int n, num[101], i, j, minustemp, temp;
	scanf("%d", &n);
	for (i = 0; i < n; i++) {
		scanf("%d", &num[i]);
	}

	for (i = 0; i < n - 1; i++) {
		for (j = 0; j < n - i - 1; j++) {
			if (num[j] > 0 && num[j + 1] < 0) {
				temp = num[j];
				num[j] = num[j + 1];
				num[j + 1] = temp;
			}
		}
	}

	for (i = 0; i < n; i++) {
		printf("%d ", num[i]);
	}
}

음의 정수는 왼쪽으로, 양의 정수는 오른쪽으로 나누되, 음의 정수와 양의 정수의 순서에는 변함이 없어야한다.

순서는 변함이 없도록 유지하는 것이 관건이다.

 

i 는 그냥 배열 한바퀴를 돌기 위한 for문이고, j는 값을 비교하기 위한 for문이다.

인접해 있는 두 숫자가 양수, 음수 라면 두 개의 순서를 바꿔준다.

이러면 i for문을 돌릴 때 마다, 오른쪽 끝에서부터 양수가 채워지면서 왼쪽은 음수, 오른쪽은 양수인 배열이 완성된다.

댓글