선택정렬은 정렬되지 않은 전체 자료 중에서 해당 위치에 맞는 자료를 선택하여 위치를 교환하는 정렬 방식이다.
오름차순으로 정렬하기위해선 다음과 같은 코드가 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | int main(void) { int i, j; int min, temp; int arr[10] = {9, 4, 5 ,3 , 1, 7, 6, 2, 8, 0}; for(i=0;i<(sizeof(arr)/4)-1;i++) { min=i; for(j=i+1;j<(sizeof(arr)/4);j++) { if(arr[min]>arr[j]) { min=j; } } temp = arr[i];arr[i] = arr[min]; arr[min] = temp; } } | cs |
첫 for문에서 -1을 한이유는, 마지막값까지 비교할 필요가 없기 때문이다.
버블정렬은 인접한 원소를 비교하여 정렬하는 방식이다.
복잡도는 느리지만 코드가 단순해서 편리하다.
구현은 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> int main(void) { int i, j; int temp; int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (i = 0; i<10; i++) { for (j = 0; j<9; j++) { if (arr[j + 1]<arr[j]) { temp = arr[i]; arr[i] = arr[j + 1]; arr[j + 1] = temp; } } } for (i = 0; i < 10; i++) printf("%d\n", arr[i]); } | cs |