일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 다중반복문
- C
- c언어
- 영재교육원
- 리눅스
- 제어문
- 자료구조
- 독서 감상문
- 알고리즘
- Backdoor
- 배열
- 참조은요양병원
- IT
- C++
- 독후감
- 정보올림피아드
- API
- 프로그래밍
- 리눅스 명령어
- For문
- DBMS
- 정보과학
- 수학영재원
- 백도어
- 반복문
- if문
- 풀이&소스코드저작권:왕유승
- Linux
- 문제출저:www.dovelet.com
- 정보영재원
Archives
- Today
- Total
되는대로 살자
[C언어 기출문제&풀이] Shake 정렬 본문
프로그램 명: shake
제한시간: 1 초
bubble 정렬을 개선한 소트 방법으로 두개의 변수로 소트할 구역을 알아냅니다.
- low : 소트할 배열의 하단 위치
- high : 소트할 배열의 상단 위치
- low : 1 , high : 7 이면 1 번째 ~ 7 번째가 소트할 대상
- low : 3 , high : 5 이면 3 번째 ~ 5 번째가 소트할 대상 즉 1 번 에서 2 번까지 , 6 번에서 7 번까지는 이미 소트가 이루어진 것을 의미 합니다.
- low >= high 이면 이미 소트가 끝났다는 것을 의미
- 한 번은 아래에서 위로 ... 마지막으로 자리바꿈이 이루어진 위치를 high 변수로 재 지정
- 한 번은 위에서 아래로 ... 마지막으로 자리바꿈이 이루어진 위치를 low 변수로 재 지정
- low < high 참이면 반복
예를 들면,
- step1.
6 2 9 8 3 4 7 ---> 2 6 8 3 4 7 9 ... right 6 <---- 2 3 6 8 4 7 9 ... left 3
- step2. .....
입력
입력은 첫 줄은 데이터의 개수 n 이 주어진다. 다음 줄에는 n 개의 데이터가 입력으로 주어진다. 각 수는 -1000 에서 1000 사이 정수이다.n 은 1000 이하의 양의 정수이다.
출력
최종 정렬이 이루어질 때 까지의 최종 스텝수를 출력한다.입출력 예
입력 7 6 2 9 8 3 4 7 출력 3
출처:elfhero 님이 추천한 문제
풀이 : 조건대로(솔직히 정렬은 완전 교과서적 개념이잖아)
소스코드
#include <stdio.h> #define N 6 int main(void) { static int a[]={1,3,2,4,5,6}; int left,right,i,shift,t,j; left=0; right=N-1; while(left<right){ for(i=left;i<right;i++){ if(a[i]>a[i+1]){ t=a[i]; a[i]=a[i+1]; a[i+1]=t; shift=i; } } right=shift; for(i=right;i>left;i--){ if(a[i]<a[i-1]){ t=a[i]; a[i]=a[i-1]; a[i-1]=t; } } left=shift; } for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); return 0; }
'2009~2014 > C/C++' 카테고리의 다른 글
[C언어 기출문제&풀이] 일곱 난장이 (0) | 2011.07.29 |
---|---|
[C언어 기출문제&풀이] 두 수(pir) (0) | 2011.07.29 |
[C언어 기출문제&풀이] bubble sort (0) | 2011.07.21 |
[C언어 기출문제&풀이] 두 수 (0) | 2011.07.21 |
[C언어 기출문제&풀이] 제네레이터 (0) | 2011.07.02 |