katte
개발새발 우주정복기
katte
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • 블로그 소개 (1)
    • Computer (36)
      • 자료구조 (0)
      • 알고리즘&백준 (19)
      • 컴퓨터구조 (0)
      • C++ (17)
      • Kotlin (0)
    • EE (29)
      • Verilog (22)
      • 디지털 시스템 (2)
      • 집적회로설계 (1)
      • 임베디드 시스템 (4)
    • 토이프로젝트 (3)
    • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 배열포인터
  • C++11
  • EOF
  • ignore
  • C언어
  • 함수포인터
  • c++ 입출력
  • 스트림
  • 입력버퍼
  • C++ 스트림 클래스
  • for 루프
  • ctime
  • 표준스트림
  • cctype
  • Get
  • cin
  • c++
  • C++ 스트림 개요

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
katte

개발새발 우주정복기

Computer/알고리즘&백준

[백준][알고리즘][C++] 2750 수 정렬하기, 버블 정렬, 삽입 정렬

2022. 11. 19. 15:59

https://www.acmicpc.net/problem/2750

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

 

 

1) 버블 정렬 알고리즘(Bubble sorting)

 

 

버블 정렬은 인접한 두 원소를 비교하여 자리를 교환해가는 알고리즘이다.

시간 복잡도는 O(n^2) (이중 for루프)

 

 

#include <iostream>
#include <vector>

using std::vector;

int main()
{
	int n;
	std::cin >> n;
	vector<int> arr(n);
	for (int i = 0; i < n; ++i)
	{
		std::cin >> arr[i];
	}
	int temp;
	for (int j = 0; j < n - 1; ++j)
	{
		for (int i = 0; i < n - j - 1; ++i)
		{
			if (arr[i] > arr[i + 1])
			{
				temp = arr[i + 1];
				arr[i + 1] = arr[i];
				arr[i] = temp;
			}
		}
	}
	for (int i = 0; i < n; ++i) std::cout << arr[i] << '\n';
}

 

 

 


 

2) 삽입 정렬 알고리즘(Insertion sorting)

 

 

2번째 원소부터 시작하여 왼쪽의 원소들과 비교하며 알맞은 위치에 삽입시킨다. 

 

i번째 원소를 삽입시키려면 그 원소의 값을 temp에 따로 저장한 뒤, i-1번째 원소부터 비교해가며, temp가 i-1번째 원소보다 작으면 i-1번째 원소를 오른쪽으로 미룬다.(어차피 i번째 원소는 따로 저장해 뒀으니)

i-2, i-3과 같이 줄여나가다가 0번째 원소가 되거나 temp보다 더 작은 원소를 만나면 오른쪽으로 미루는 것을 멈추고 해당 자리에 temp를 끼워넣는다. 

 

시간 복잡도는 최악의 경우 O(n^2)이며, 최선의 경우 O(n)이다.

 

 

#include <iostream>
#include <vector>

using std::vector;

int main()
{
	int n;
	std::cin >> n;
	vector<int> arr(n);
	for (int i = 0; i < n; ++i)
	{
		std::cin >> arr[i];
	}
	int temp;
	for (int i = 1; i < n; ++i)
	{
		temp = arr[i];
		int j;
		for (j = i - 1; j >= 0 && temp < arr[j]; --j)
		{
			arr[j + 1] = arr[j];
		}
		arr[j + 1] = temp;
	}

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

 

 

저작자표시 (새창열림)

'Computer > 알고리즘&백준' 카테고리의 다른 글

[백준][C++] 1874 스택 수열  (0) 2022.11.29
[백준][C++] 4949 균형잡힌 세상  (0) 2022.11.29
[백준][C++] 2738 행렬 덧셈  (0) 2022.11.16
[백준] [C++] 11729 하노이 탑 이동 순서  (0) 2022.11.15
[알고리즘] 시간복잡도와 공간복잡도, 빅-오(Big-Oh) 표기법  (0) 2022.11.15
    'Computer/알고리즘&백준' 카테고리의 다른 글
    • [백준][C++] 1874 스택 수열
    • [백준][C++] 4949 균형잡힌 세상
    • [백준][C++] 2738 행렬 덧셈
    • [백준] [C++] 11729 하노이 탑 이동 순서
    katte
    katte
    개발새발 코딩하는 블로그 / HW 위주

    티스토리툴바