본문 바로가기
CS

버블정렬, 선택정렬, 삽입정렬

by ddanss 2023. 2. 17.
728x90

버블정렬

인접한 인자와 비교하여 더 큰 원소를 뒤로 보내는 방식

시간복잡도 : Best-N^2, Avg-N^2, Worst-N^2

공간복잡도 : O(N)

#include<iostream>
using namespace std;

int main() {
	int arr[10] = { 4,2,5,1,10,6,8,9,7,3 };
	int n = 10;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n - i - 1; j++) {
			int temp;
			if (arr[j] > arr[j + 1]) { //앞에 있는게 뒤에꺼보다 크면 스왑해준다
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < n; i++) {
		cout << arr[i] << ' ';
	}
}

 

 

선택정렬

가장 작은 값들을 앞으로 하나씩 보내는 방식

시간복잡도 : Best-N^2, Avg-N^2, Worst-N^2

공간복잡도 : O(N)

버블정렬보다는 조금 빠름

비교는 많지만 교환하는 횟수는 적기때문에 교환이 많은 곳에는 효율적

 

#include<iostream>
using namespace std;

int main() {
	int arr[10] = { 4,2,5,1,10,6,8,9,7,3 };
	int n = 10;
	
	int min, minindex, temp;
	for (int i = 0; i < n-1; i++) {
		min = 1000;
		for (int j = i; j < n; j++) { //i번째부터 뒤에까지
			if (arr[j] < min) { //가장 작은 값을 찾아서
				min = arr[j]; //값 저장
				minindex = j; //인덱스 저장해주고
			}
		}
        //i번째와 가장 작은 값을 스왑해준다
		temp = arr[minindex]; 
		arr[minindex] = arr[i];
		arr[i] = temp;
	}

	for (int i = 0; i < n; i++) {
		cout << arr[i] << ' ';
	}
}

 

삽입정렬

2번째 원소부터 시작해서 현재 자리의 앞의 원소들과 비교해 현재의 원소가 앞의 원소들보다 작다면 더 앞으로 옮기는 방식

맨앞으로 가장 작은걸 하나씩 옮겨줌

시간복잡도 : Best-N, Avg-N^2, Worst-N^2

공간복잡도 : O(N)

최선의 경우가 O(N)

데이터의 상태 및 데이터의 크기에 따라서 성능의 편차가 굉장히 심한 정렬

#include<iostream>
using namespace std;

int main() {
	int arr[10] = { 4,2,5,1,10,6,8,9,7,3 };
	int n = 10;
	int key, i, j;

	for (i = 1; i < n; i++) {
		key = arr[i]; //i번째값을 초기 key값으로 두고
		for (j = i - 1; j >= 0; j--) {
			if (arr[j] > key) arr[j + 1] = arr[j]; //앞에 있는값을 뒤에 값으로 옮겨두고
			else break; //앞에 있는 것이 더 작을때까지
		}
		arr[j + 1] = key; //마지막 key가 들어갈 자리를 찾으면 key를 넣어준다
	}

	for (int i = 0; i < n; i++) {
		cout << arr[i] << ' ';
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'CS' 카테고리의 다른 글

다익스트라 c++  (1) 2023.04.03
플로이드 와샬  (0) 2023.03.02
투포인터  (0) 2023.02.22
백트래킹  (0) 2023.02.21
퀵정렬, 합병정렬, 힙정렬  (0) 2023.02.17

댓글