13. 10~30사이의 난수 10개를 발생시켜 오름차순으로 거품정렬하는 프로그램을 작성하시오. <프로그램 소스> #include <stdio.h> // printf() #include <stdlib.h> // rand(), RAND_MAX #include <time.h> // time() //*********************************************************** // a[]의 각 요소를 올림차순으로 정렬. n : a[]의 요소수 //*********************************************************** void GPmJRyul(int a[], int n) { int i, j, ghwan, imsi; for (i=0 ; i<n-1 ; i++) // n-1 회전 비교/교환 { ghwan = 0; for (j=0 ; j<n-i-1 ; j++) // i-1번 비교/교환 if (a[j] > a[j+1]) // 크면 두 값을 교환 { imsi = a[j]; a[j] = a[j+1]; a[j+1] = imsi; ghwan = 1; // 교환 발생 } if (ghwan==0) // 교환이 한번도 일어나지 않았으면 return; } } //*********************************************************** int main() { int nsu[10]; int i, N=10; // 실행시마다 다른 계열의 난수가 발생되게 한다 srand( time(NULL) ); // 10 ~ 30 사이의 난수 10 개를 발생시킨다 puts("\n정렬전"); for (i=0 ; i<N ; i++) { nsu[i] = rand() % 21 + 10; printf("%d ", nsu[i]); } GPmJRyul(nsu, N); puts("\n\n정렬후"); for (i=0 ; i<N ; i++) printf("%d ", nsu[i]); printf("\n"); } <출력결과> 정렬전 25 26 10 12 12 14 11 17 18 29 정렬후 10 11 12 12 14 17 18 25 26 29
|
|