IT/All-Day-Algorithms_쫑알쫑알(종일 알고리즘)

[java & c]선택정렬(SelectionSort)

밍띠이 2019. 3. 17. 01:26
반응형

선택정렬

단순하지만 비효율 적인 방법 : 삽입정렬, 선택정렬, 버블정렬등

(n-1)+(n-2) + ... + 1= n(n-1)/2 = O(n^2)

주의

값이 같은 레코드가 있는 경우에 상대적인 위치가 변경될 수 있기 때문에 안정성을 만족하지 않는다.

java

import java.util.Arrays;

public class SelectionSortEx {
    public static void main(String[] args) {
        int[] list = { 1, 3, 4, 9, 7, 6 };
        int least = 0;
        int temp = 0;

        System.out.println("정렬할 배열 : " + Arrays.toString(list));
        for (int i = 0; i < list.length - 1; i++) {
            least = i;
            for (int j = i + 1; j < list.length; j++) {
                if (list[j] < list[least]) {
                    least = j;

                    temp = list[i];
                    list[i] = list[least];
                    list[least] = temp;

                } // if
            } // 내부 for문
            System.out.println("[" + i + "] 번째 선택정렬 중 :" + Arrays.toString(list));
        } // 외부 for문
            // 결과
        System.out.println("선택정렬 결과 : " + Arrays.toString(list));
    }
}

C

#define  SWAP(x, y, t) ( (t) = (x), (x) = (y), (y) = (t) )

void  selection_sort(int list[], int n)
{
    int i, j, least, temp;
    for ( i =  0; i < n -  1; i++ ) {
    least = i;
        for ( j = i +  1; j < n; j++) {
                if (list[j] < list[least]) least = j;
        SWAP(list[i], list[least], temp);
        }
    }
}
반응형