| 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 | #include <stdio.h> #define SIZE 5 int main(void) { int i, k; int list[SIZE] = { 16, 7, 9, 1, 3 }; // 배열의 요소를 정렬한다. for (k = 0; k < SIZE; k++) { for (i = 0; i < SIZE -k -1; i++) { if (list[i] > list[i + 1]) { // 크기 순이 아니면 // 서로 교환한다. int tmp = list[i]; list[i] = list[i + 1]; list[i + 1] = tmp; } } } // 배열의 요소를 출력한다. for (i = 0; i < SIZE; i++) { printf("%d ", list[i]); } return 0; } | cs |
바깥 for loop 가 수행된 횟수만큼 배열 뒷쪽의 수는 정렬이 되어있기 때문에 더 이상 정렬할 필요가 없다.
| 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 | #include <stdio.h> #define SIZE 5 int main(void) { int i, k; int list[SIZE] = { 16, 7, 9, 1, 3 }; // 배열의 요소를 정렬한다. for (k = 0; k < SIZE; k++) { int swap_flag = 0; for (i = 0; i < SIZE -k -1; i++) { if (list[i] > list[i + 1]) { // 크기 순이 아니면 // 서로 교환한다. int tmp = list[i]; list[i] = list[i + 1]; list[i + 1] = tmp; swap_flag = 1; } } if (swap_flag == 0) break; } // 배열의 요소를 출력한다. for (i = 0; i < SIZE; i++) { printf("%d ", list[i]); } return 0; } | cs |
이미 정렬이 완성되었으면 더 이상 바깥 for loop 가 수행될 필요가 없다.


C프로그래밍(프로그래밍언어) 실습게시판