2012년 10월 1일 월요일

공부하면 좋을만한 초간단 소팅 to 훈민상미

메일도 보내는데

내가 여기다가 여러 게시물을 올리는데 나중에 찾기 어려울까봐 

게시물은 "to 훈민상미"로 통일했어.

하루 정도 지나면 구글에서 "to 훈민상미"로 손쉽게 검색 할 수 있을거야.

알고리즘의 가장 기본은 소팅이라고 할 수 있는데

우선 간단히 예제를 하나 만들어 보면(자바 기준)

public static void SimpleSort(int[] array)
{
int i, j;
for(i=0;i
for (j=0;j
if(array[j] < array[i])
swap(array, i, j);
}


위와 같아.

소스는 짧은데 일지에게서 변수, 배열, 제어문, 함수 파라미터, static, 포인터 의 속성 등등을 다 배우워야 이해 할 수 있는 코드라고 할 수 있지.

swap은 한번 짜보면 좋겠네. 그냥 i랑 j 값을 바꾸면 되거든.

temp값을 하나 둬서 i 값을 잠시 보관하고 i, j를 바꿔도 되고.

그런데 i, j 가 지역 변수 이면 지역 변수값만 바뀌니까 포인터를 알아야 하는거지.
(사실 자바도 모두 포인터거든)

모르면 일지 좀 졸라서 가르쳐 달라고 하고~


간단히 설명하면
i, j가 0으로 각각 주어지고

배열의 크기가 v라고 하면 v*v 만큼 돌아가면서 배열 값을 바꾸는 거야

2 1 3 6 3 2 5

가 있다고 하면

일단

i[0], j[0]값이 똑같이 2 잖아.

그래서 아무런 변화 없지

그 다음은

i[0], j[1]이고

값은

2하고 1 이니까

j가 i보다 작으니 교환

그럼
1 2 3 6 3 2 5

거든.

그 다음은 

1이랑 3이랑 비교

1일아 6이랑 비교... 뭐 이렇게 되는거지.

결국 가장 작은 값을 찾아서 첫번째 자리에 놓고 난 다음에 두번째 자리 값을 비교 하게 되는 거야.

그럼, 문제점은 뭘까?

j다 다 돌고 나면 i가 1이 되면서 i[1]이랑 j[0]이랑 비교하게 되는데 각각 2하고 1이잖아

그러니 다시 자리가 바뀌게 되니까 제대로 소팅이 안되지.

결국

for (j=0;j

for (j=i;j
로 바뀌면 되겠지?

알고리즘에서 틀린 부분 찾으라고 하면 저정도가 될 것 같아.

결국 시경과니까 생각하면 쉬운 문제인데(OR같은 애들이 아니니까) 프로그래밍을

보르면 풀기가 애매하겠지. 그래서 그 동안 기초만 다져놓으면 될 것 같아. 문제를 많이 보고.


댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...