본문 바로가기
카테고리 없음

2750 백준 (수 정렬하기) <C++> - 여러가지 정렬 방법

by 코드 이야기 2020. 6. 7.
728x90

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

 

2750번: 수 정렬하기

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

www.acmicpc.net

 

<선택 정렬>

#include <iostream>
using namespace std;

int main() {
  int n, arr[1001], swap;

  cin>>n;

  for(int i=0; i<n; i++)
    cin>>arr[i];
  
  for(int i=0; i<n; i++)
  {
    for(int j=i; j<n; j++)
    {
      if(arr[i]>arr[j])
      {
        swap=arr[i];
        arr[i]=arr[j];
        arr[j]=swap;
      }
    }
  }

  for(int i=0; i<n; i++)
    cout<<arr[i]<<" ";

}

 

 

<삽입 정렬>

#include <iostream>
using namespace std;

int arr[1001], n, tmp, j;

int main() {
  cin>>n;

  for(int i=0; i<n; i++)
    cin>>arr[i];
  
  for(int i=0; i<n-1; i++)
  {
    j=i;
    while(j>=0 && arr[j] > arr[j+1]){
      tmp=arr[j];
      arr[j]=arr[j+1];
      arr[j+1]=tmp;
      j--;
    }
  }

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

}

 

 

<계수정렬>

#include <stdio.h>

  int n, input;
  int r[10001];
  int i, j;

int main(void) {
  scanf("%d", &n);

  for(i=0; i<n; i++)
  {
    scanf("%d", &input);
    r[input]++;
  }

  for(i=0; i<10001; i++)
    if(r[i])
      for(j=0; j<r[i]; j++)
        printf("%d\n",i);
}

 

 

728x90

댓글