본문 바로가기

알고리즘

[알고리즘] 백준 2750번 문제_단순 정렬

================================== 풀이 ====================================

선택 정렬 : 가장 작은 값은 선택하여 앞으로 보내는 정렬

int main(void) {  //  2750번  선택 정렬 

	int tmp, num,min, index;
	int data[1000];

	scanf("%d", &num);

	for (int i = 0; i < num; i++) 
		scanf("%d", &data[i]);

	for (int i = 0; i < num; i++) {

		min = 1001;

		for (int j = i; j < num; j++) {
			if (min > data[j]) {
				
				min = data[j];
				index = j;
			}
		}

		tmp = data[i];
		data[i] = data[index];
		data[index] = tmp;
	}

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

버블 정렬 : 바로 옆에 위치한 값과 비교하여 작은 값을 앞으로 보내는 정렬

=> 제일 마지막에 위치한 값은 제일 큰 값이 된다.

 
int main(void) {  //  2750번  버블 정렬 

	int tmp, num;
	int data[1000];

	scanf("%d", &num);

	for (int i = 0; i < num; i++) 
		scanf("%d", &data[i]);

	for (int i = 0; i < num; i++) {
		for (int j = 0; j < num - i - 1; j++) {	
			if ( data[j] > data[j + 1]) {
				
				tmp = data[j];
				data[j] = data[j + 1];
				data[j + 1] = tmp;

			}
		}
	}

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

삽입 정렬 : 기본적으로 앞에 있는 값들은 모두 정렬되어 있다고 생각하고 정렬을 시작한다.

int main(void) {  //  2750번  삽입 정렬 

	int tmp, num;
	int data[1000];

	scanf("%d", &num);

	for (int i = 0; i < num; i++) 
		scanf("%d", &data[i]);

	for (int i = 0; i < num-1; i++) {
			for (int j = i; j >= 0 && data[j] > data[j + 1]; j--) {			
				tmp = data[j];
				data[j] = data[j + 1];
				data[j + 1] = tmp;
			}
	}

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

반응형