이번에는 정렬의 기본인 거품정렬(Bubble Sort) 문제를 풀어보았습니다!!
기본이라지만 저에겐 역시나 어려웠습니다ㅠㅜ
프로그램 명: bubble
제한시간: 1 초
다음 애플릿은 버블 소트가 이루어지는 과정이다.
//// [동작보기 클릭] //////
데이터 수 , 스텝 수가 주어질 때 위와 같이 동작하도록 한 후 주어진 스텝 후의 배열의 상태를 출력하는 것이다.
예를 들어 7 개의 데이터가 주어지고 , 2 스텝 후의 상태는
6 2 9 8 3 4 7
1 번째 스텝: 2 6 8 3 4 7 9
2 번째 스텝: 2 6 3 4 7 8 9
2 6 3 4 7 8 9 를 출력하면 된다.
입력
입력의
- 첫 줄은 데이터의 개수 n, 스텝 수 s 가 주어진다. ( 1 <= s < n )
- 다음 줄에는 n 개의 데이터가 입력으로 주어진다. 각 수는 -1000 에서 1000 사이 정수이다.
n 은 1000 이하의 양의 정수이다.
출력
s 스텝 후의 상태를 한 줄에 출력한다.
입출력 예
입력
7 2
6 2 9 8 3 4 7
출력
2 6 3 4 7 8 9
즉 min[i]로 1과 2, 2와 3, 이렇게 두개씩 묶어 비교하는 코드를 짜면 됩니다.
완성된 코드는 다음과 같습니다.
#include <stdio.h>
int main(){
int n, s, i;
int sort[1000];
int temp, count = 0;
scanf("%d %d", &n, &s);
for (i = 0; i < n; i++){
scanf("%d", &sort[i]);
}
while (count < s){
for (i = 0; i < n - 1; i++){
min = sort[i];
if (min > sort[i + 1]){
temp = sort[i];
sort[i] = sort[i + 1];
sort[i + 1] = temp;
}
}
count++;
}
for (i = 0; i < n; i++){
printf("%d ", sort[i]);
}
return 0;
}
결과는??
통과~~
처음엔 밑과 같이 이중for문으로 풀려했으나, 그러면 안쪽 for문이 한바퀴 돈 뒤에 sort[0]부터 시작할 수가 없어 위의 코드와 같이
while-for문을 사용하여 문제를 풀었습니다.
for (j = 0 ; j < s ; j++) {
for (i = j; i < n - 1; i++){
min = sort[i];
if (min > sort[i + 1]){
temp = sort[i];
sort[i] = sort[i + 1];
sort[i + 1] = temp;
}
}
}
기본적인 버블정렬도 2시간만에 코드를 짰습니다ㅠㅠ 앞으로도 갈길이 멀군요. 더욱 노력해야겠습니다
'Algorithm' 카테고리의 다른 글
Cousera_Python for everyone_Chapter 1. 수업 후기. (0) | 2016.07.22 |
---|---|
[C] 더블릿 5단계_평평하게 하기 (0) | 2016.03.29 |
[C] 더블릿 4단계_ 최대수연결 문제 (0) | 2016.03.28 |
[C] 더블릿 4단계_ 소인수분해 문제 (0) | 2016.03.27 |