아래의 그림은 삽입정렬을 보여주는 그림입니다. 삽입정렬은 맨 첫번째 원소를 기준으로 해서 왼쪽부터 하나씩 알맞는 위치에 삽입하는 정렬입니다. 맨 첫 번째 원소부터 하나씩 증가하며 왼쪽에 정렬을 합니다. 그리고 정렬되지 않은 그림상에서의 하얀 부분의 원소들을 정렬이 된 검은 부분에 자신의 위치에 맞는 곳에 삽입합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 void InsertionSort( int array[], int num ) { for( int i=1; i=0; j--,n-- ) { if( array[j] > array[n] ) swap( array[j], array[n] ); } } } Colored by Color Scripter cs
아래는 버블 정렬을 보여주는 그림입니다. 버블 정렬은 그림과 같이 맨 처음 원소부터 인접한 원소를 비교하여 맨 끝 원소까지 비교를 하며 정렬을 하는 방법입니다. 그리고 그 모양이 물 속에서 물방울이 올라오는 모양같다고 하여 버블 정렬이라고 부릅니다. 아래와 같이 인접한 원소끼리 비교하여 큰 원소이면 바꾸는 식으로 뒤로 뒤로 보내게 되는 데요. 그런식으로 하다본면 맨 마지막 원소엔 가장 큰 원소가 자리잡게 됩니다. 그런식으로 다시 첫 원소부터 다시 비교를 하여 정렬을 하게 됩니다. 가장 큰 것을 마지막에 넣는 식이다 보니, 이미 정렬이 된 원소들은 제외를 하면서 정렬을 합니다. 1 2 3 4 5 6 7 8 9 10 11 void BubbleSort( int *array, int num ) { for( in..
아래의 이미지는 7개의 정수를 선택 정렬을 이용하여 정렬을 하고 있는 모습니다. 가장 첫 번째자리 8이 있는 자리에 7개의 배열을 검사하여 제일 작은 녀석을 8과 바꿉니다. 그렇게 되면 우선 1번쨰 자리에는 가장 작은 녀석이니 배제하고 2번째에 들어올 녀석을 다시 6개의 배열을 검사하여 제일 작은 녀석과 2번째 자리에 있는 4와 바꾸는 식으로 정렬을 하게 됩니다. 시간 복잡도는 O(n²) 입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 void SelectionSort( int *array, int num ) { int idx = 0; for( int i=0; i
지최찾기 문제 입니다. 첫 번 째 입력엔 각각 행과 열을 나타나는 개수를 넣습니다. 입력시 0보다 크고 100보다 작아야 하며, 지뢰는 *, 공백 칸은 . 을 넣어야 합니다. 그리고 역시나 0이 입력될 시 프로그램이 종료되도록 처리를 해야 합니다. 근데 역시나 1번째 문제에와 같이 채점 봇이 영 지랄이라 .. 하.. 아직 초반대 문제라 쉬워서 푸는 건 몇 분 안걸리는데 문제는 채점 봇을 통과하기가 힘들어서 1번째도 이것저것 뭐가 문제인지 찾고 고치는 데만 몇 시간ㅡ_ㅡ.. 정말 문제를 잘 봐야하고 여러 조건에 만족이 되어야 하다보니.. 너무 들이는 시간에 비해 의미가 없는 듯 해서 다음에는 그냥 문제만 푸는 형태로 해야 될듯합니다. 아오. SyntaxHighlighter 왜 이러지 아래 코드가 반 이상 ..
정수 n이 짝수면 2로나누고, 홀수면 3을 곱한 다음 1을 더한다. 이렇게 해서 n=1이 될 때까지 작업을 반복한다. 예) n=22 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 이 가설은 1,000,000까지의 정수에 대해서는 참이다. n이라는 값이 입력되고, 1이 나올 떄까지 만들어 진 수의 갯수를 사이클 길이라고 할때 22의 사이클 길이는 16이다. 이떄 i,j라는 두개의 수가 주어 졌을 때 i,j 두 수를 포함한 사이의 모든 수의 최대 사이클 길이를 구하라. 입력은 i, j 한쌍이며 모든 정수는 1,000,000보다 작고 0보다 크다. 입력 예) 1 10 100 200 201 210 900 1000 출력 예 1 10 20 100 200 125 201 210 89 90..
알고리즘 문제를 풀던 중 자꾸 문자열을 넘겨주는 곳에서 에러가 났습니다. void reserve( char *str ) { char *ss =str; int n = 0; while((*ss)!=NULL) { n++; ss++; } ss--; int i = 0; while( n/2 > i++ ) { char temp = *str; *str++ = *ss; *ss-- = temp; } } *str++ = *ss; 이 부분에서 났었습니다. 그래서 원인을 찾던 중 reserve 함수의 인자로 넘겨주는 char형이 char* 이 문제라는 것을 알게 되었습니다. 하.. 예전에도 분명 문자열을 주고 받고 했었는데 왜 몰랐는지. 그때도 분명 문제가 있었을 텐데.. 까먹은건지 어떤건지.. 정확히는 좀 더 알아봐야 겠지만..