본문 바로가기

백준

[백준] 2750번 - 선택정렬,버블정렬,삽입정렬

 

#include <string>
#include <vector>
#include <iostream>
#include <cmath>

using namespace std;

int main() {
	int count;
	cin >> count;
	int* num = new int[count];
	for (int i = 0; i < count; i++) {
		int a;
		cin >> a;
		num[i] = a;
	}

	int minidx,temp;

	for (int i = 0; i < count - 1; i++) {
		int min = num[i];
		for (int j = i + 1; j < count; j++) {
			if (min > num[j]) {
				min = num[j];
				minidx = j;
			}
		}
		if (minidx != 0) {
			temp = num[i];
			num[i] = num[minidx];
			num[minidx] = temp;
			minidx = 0;
		}
	}

	for (int i = 0; i < count;i++) {
		cout << num[i] << endl;
	}
	
}

선택정렬

배열을 돌면서 첫번째 값과 최소값을 바꾼다.

바꾸고 난 이후에는 두번째 값과 최소값을 바꾸고 세번째 값과 최소값을 바꾼다. 이 과정을 반복한다.

 

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int main() {
	int count;
	cin >> count;
	int* num = new int[count];
	for (int i = 0; i < count; i++) {
		int a;
		cin >> a;
		num[i] = a;
	}

	int temp;

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

	for (int i = 0; i < count;i++) {
		cout << num[i] << endl;
	}	
}

버블정렬

i=0일때 처음 요소와 다음 요소를 비교해서 더 큰 값을 뒤로 보내고 이것을 반복한다.

j루프를 한번 돌면 가장 큰 값이 자동으로 맨 뒤로가기 때문에 j 루프는 count에서 i를 뺀만큼만 돈다.

 

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int main() {
	int count;
	cin >> count;
	int* num = new int[count];
	for (int i = 0; i < count; i++) {
		int a;
		cin >> a;
		num[i] = a;
	}

	int temp,i,j;

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

	for (int i = 0; i < count;i++) {
		cout << num[i] << endl;
	}	
}

삽입정렬

i=1부터 시작해서 i번째 요소를 temp로 정하고 temp 왼쪽부터 루프를 돌려서

temp보다 크면 오른쪽으로 옮기고 작으면 그자리에 temp를 배치한다.