일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 구조체
- 포인터
- 정렬
- Windows API
- 알고리즘
- C
- 테트리스
- scanf
- string
- 오목#함수#gotoxy#금수#알고리즘#2차원#배열#실무#프로젝트
- 구현
- 함수
- 커서
- 연결리스트
- crud
- Time
- 문자열
- 이진탐색#binary_search
- 배열
- 공백
- 3차원 배열
- 삽입
- 콘솔
- 선택
- 파일입출력
- 난수
- 버블
- 셀
- C언어
Archives
- Today
- Total
C언어 알고리즘 정리 및 실무 프로젝트
C언어의 선택정렬, 버블정렬, 삽입정렬, 셸 정렬 알고리즘 (Call by Reference 포인터 기능) 본문
C언어 알고리즘
C언어의 선택정렬, 버블정렬, 삽입정렬, 셸 정렬 알고리즘 (Call by Reference 포인터 기능)
C's everything! 2022. 4. 20. 16:27반응형
사용자 지정 함수 사용 절차: 1. 사용자 지정 헤더 파일( ex: function.h )을 새로 생성합니다.
2. 생성된 헤더파일에 아래의 코드를 붙여넣습니다.
3. main()가 있는 소스에 헤더파일을 포함시킵니다. ( ex: #include " function.h")
안정정렬: 중복된 값이 있을 때, 원본순서와 동일하게 정렬되는 방식 ex) 버블정렬, 삽입정렬
불안정정렬: 중복된 값이 있을 때, 원본순서와 동일하지 않게 정렬되는 방식 ex) 선택정렬, 셸정렬
void bubble_p(int num[], int size) // 버블 정렬
{
// 첫 번째 매개변수: 배열의 이름(시작 주소)
// 두 번째 매개변수: 배열의 크기
int temp;
for (int i = 0; i < size - 1; i++) {
for (int k = 1; k < size - i; k++) {
if (*(num + k - 1) > *(num + k)) // 오른쪽이 더 작으면 바꿈.(오름차순)
{
temp = *(num + k);
*(num + k) = *(num + k - 1);
*(num + k - 1) = temp;
}
}
}
}
void insert_p(int num[], int size) // 삽입 정렬
{
int temp;
for (int i = 1; i < size; i++) {
for (int k = 0; k < i; k++) {
if (*(num + k) > *(num + i)) // i번째 요소에서 k번째 요소의 값들을 하나씩 비교하면서 정렬
{ // i번째 요소가 더 작으면 자리를 바꿈. (오름차순)
temp = *(num + k);
*(num + k) = *(num + i);
*(num + i) = temp;
}
}
}
}
void select_p(int num[], int size) // 선택 정렬
{
int i = 0, j = 0;
int temp;
for (i = 0; i < size - 1; i++)
{
for (j = i + 1; j<size; j++)
{
if (*(num + i) > *(num + j))
// 왼쪽의 값을 오른쪽의 값들과 계속 비교하는 방식
{
temp = *(num + i);
*(num + i) = *(num + j);
*(num + j) = temp;
}
}
}
}
void cell_p(int num[], int size) // 셸 정렬 (삽입 정렬의 단점 보완)
{
int temp;
int interval = size / 2; // 간격 초기값
while (interval != 1) { // 간격이 1이 될 때까지 반복 (정해진 간격만큼 떨어진 요소끼리 반복해서 정렬한다.)
for (int i = 0; i <size - interval; i++) { // 간격이 줄어들수록 많이 반복함.
if (*(num + i) > *(num + interval + i)) // 오른쪽이 더 작으면 바꿈. (오름차순)
{
temp = *(num + interval + i);
*(num + interval + i) = *(num+i);
*(num + i) = temp;
}
}
interval /= 2;
if (interval % 2 == 0) // 짝수면 ++ ( 간격은 홀수인게 편리합니다.)
interval++;
}
insert_p(num, size); // 간격이 1이 된 이후에는 삽입 정렬을 수행한다.
}
반응형
'C언어 알고리즘' 카테고리의 다른 글
C언어의 병합정렬 (merge_sort) 알고리즘 (0) | 2022.06.25 |
---|---|
C언어 포인터를 활용한 문자열 관련 함수(strcpy, strcat, strcmp, strncmp, strlen) 직접 구현하기 (4) | 2022.05.20 |
C언어 이중 for문과 배열을 이용한 달팽이 배열 알고리즘 (0) | 2022.05.20 |
C언어 연결리스트 구현(포인터에 대한 완벽 이해) (0) | 2022.04.20 |
rand()를 이용한 로또 추출 알고리즘과 정렬 (0) | 2022.04.20 |
Comments