c언어/c언어 (문제풀기)

c언어로 버블정렬 내림차순으로 정렬하기(파일입출력)

byeol2ing 2017. 8. 13. 14:37
반응형


배열에 저장되어 있는 요소들을 내림차순으로 정렬하는 함수를 정의하자.(함수의 이름은 desort로 정의하자). 그리고 이 함수를 호출하는 예제를 작성해 보자. 프로그램의 기본 구성은 다음과 같다. 일단 길이가 7인 int형 배열을 선언해서 사용자로부터 7개의 정수를 입력받도록 하자. 그리고 입력 받은 정수를 내림차순으로 정렬하기 위해서, 배열을 인자로 전달하면서 desort함수를 호출한다. 그리고 마지막으로 정렬이 되었음을 확인하기 위해서 배열의 요소들을 순서대로 출력한다.


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
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<stdio.h>
 
int desort(int b[])
{
    int a=0;
    int c=0;
    int temp=0;
 
    for(a=0;a<6;a++)
    {
        for(c=0;c<6-a; c++)
        {
            if(b[c]<b[c+1])
            {
                temp=b[c+1];
                b[c+1]=b[c];
                b[c]=temp;
            }
        }
 
    }
    
    for(a=0;a<7;a++)
    {
    printf("%d",b[a]);
    }
 
}
 
int main()
{
    int i=0;
    int b[7]={0};
    printf("7개의 정수를 입력하세요.");
    
    for(i=0; i<7; i++)
    {
        scanf("%d",&b[i]);
    
    }
 
    desort(b);
}
cs



또한, 파일 입출력을 통해 버블정렬하는 프로그램은 아래와 같습니다.


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<stdio.h>
 
int desort(int b[])
{
    int a=0;
    int c=0;
    int temp=0;
 
    for(a=0;a<6;a++)
    {
        for(c=0;c<6-a; c++)
        {
            if(b[c]<b[c+1])
            {
                temp=b[c+1];
                b[c+1]=b[c];
                b[c]=temp;
            }
        }
 
    }
    
    for(a=0;a<7;a++)
    {
    printf("%d",b[a]);
    }
 
}
 
int main()
{
    int i=0;
    int b[7]={0};
 
    FILE *rfp = fopen("a.txt","r");
    FILE *wfp = fopen("output.txt","w");
    //printf("7개의 정수를 입력하세요.");
    
    for(i=0; i<7; i++)
    {
        fscanf(rfp,"%d\n",&b[i]);
    }
 
    
    desort(b);
    for(i=0; i<7; i++)
    {
        fprintf(wfp,"%d",b[i]);
    }
 
}
cs

아래는 FLAG변수를 이용한 효율적인 버블정렬입니다 
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include<stdio.h>
 
int desort(int b[])
{
    int a=0;
    int c=0;
    int temp=0;
   int flag=0;
 
 
    for(a=0;a<6;a++)
    {
      flag=0;
        for(c=0;c<6-a; c++)
        {
            if(b[c]<b[c+1])
            {
                temp=b[c+1];
                b[c+1]=b[c];
                b[c]=temp;
            flag=1;
            }
      
      
        }
 
      if(flag==0)
      {
         break;
      }
 
    }
    
    for(a=0;a<7;a++)
    {
    printf("%d",b[a]);
    }
 
}
 
int main()
{
    int i=0;
    int b[7]={0};
    printf("7개의 정수를 입력하세요.");
    
    for(i=0; i<7; i++)
    {
        scanf("%d",&b[i]);
    
    }
 
    desort(b);
}
cs


반응형