목차
c언어 정렬알고리즘
삽입정렬
버블정렬
선택정렬
퀵정렬
삽입정렬
버블정렬
선택정렬
퀵정렬
본문내용
Cnt) // 배열 크기의 -1보다 작을때까지 반복
{
nMin = nIdx_p; nCnt++; // 현재 인덱스를 임시변수(최소값 비교위한 변수)에 저장
for(nIdx_n=nIdx_p+1; nIdx_n
{
if( nCnt++ && *(select_arr+nMin) > *(select_arr+nIdx_n) ) // 현재 인덱스의 값과 임시변수의 인덱스 값과 비교하여 임시변수가 인덱스의 값이 큰 경우
nMin = nIdx_n; nCnt++; // 현재값이 작으므로 임시변수에 저장
}
nTemp = *(select_arr+nIdx_p); nCnt++; // 전 임시변수(최소값 인덱스) 인덱스의 값을 임시 변수에 저장
*(select_arr+nIdx_p) = *(select_arr+nMin); nCnt++; // 현재 저장된 최소값 임시 변수의 인덱스의 값을 이전 최소값 인덱스에 저장
*(select_arr+nMin) = nTemp; nCnt++; // 임시 변수에 저장된 값을 현재 저장된 최소값 임시 변수의 인덱스에 저장
}
// 빈도수에서 제외
//->>///////////////////////////////////////////////////////////////////////////
print_arr(select_arr, nSize, select_sorting); // 출력 함수 호출
free(select_arr); // 할당된 메모리 해제
///////////////////////////////////////////////////////////////////////////<<-//
return nCnt;
}
// 퀵 정렬 함수
void quick_sort(int* quick_arr, int nLeft, int nRight, int* nCnt)
{
int nIdx_l, nIdx_r, nKey, nTemp;
if( ++(*nCnt) && nLeft < nRight ) // 왼쪽 인덱스가 오른쪽 인덱스보다 작은 경우 (처음에는 인덱스의 첫번째와 마지막번째가 넘어옴)
{
nIdx_l = nLeft + 1; (*nCnt)++; // 왼쪽에서 오른쪽으로 증가할 인덱스의 초기값을 인자로 받은 왼쪽 인덱스+1로 줌
nIdx_r = nRight; (*nCnt)++; // 오른쪽에서 왼쪽으로 증가할 인덱스의 초기값을 인자로 받은 오른쪽 인덱스로 줌
nKey = *(quick_arr+nLeft); (*nCnt)++; // 기준 키값을 인자로 받은 왼쪽 인덱스의 값으로 줌
while( ++(*nCnt) && nIdx_l <= nIdx_r ) // 왼쪽 인덱스가 오른쪽 인덱스보다 작거나 같을 동안 반복하면서
{
while( ++(*nCnt) && *(quick_arr+nIdx_l) < nKey ) // 왼쪽인덱스가 가지는 값과 키 값을 비교하여 인덱스가 가지는 값이 작으면
nIdx_l++; (*nCnt)++; // 왼쪽 인덱스 증가
while( ++(*nCnt) && *(quick_arr+nIdx_r) > nKey ) // 오른쪽 인덱스가 가지는 값과 키 값을 비교하여 인덱스가 가지는 값이 크면
nIdx_r--; (*nCnt)++; // 오른쪽 인덱스 증가
if( ++(*nCnt) && nIdx_l < nIdx_r ) // 위에서 구한 인덱스 왼쪽과 오른쪽을 비교하여 오른쪽 인덱스가 크면
{
// 두 인덱스가 가지는 값을 교환
nTemp = *(quick_arr+nIdx_l); (*nCnt)++; // 왼쪽 인덱스가 가지는 값을 임시 변수에 저장
*(quick_arr+nIdx_l) = *(quick_arr+nIdx_r); (*nCnt)++; // 왼쪽 인덱스가 가지는 값을 오른쪽 인덱스의 값으로 변경
*(quick_arr+nIdx_r) = nTemp; (*nCnt)++; // 오른쪽 인덱스의 값을 임시변수에 저장한 값으로 변경
}
}
// 두 인덱스가 서로 교차되면 (왼쪽 인덱스가 오른쪽 인덱스 보다 커지면)
// 기준 키 값과 변경된 오른쪽 인덱스(왼쪽 인덱스보다 오른쪽 인덱스가 작아진 시작 인덱스)가 가지는 값을 교환
//nTemp = *(quick_arr+nLeft); (*nCnt)++; // 임시 변수에 처음의 왼쪽 인덱스 값(키 값)을 저장
nTemp = nKey; (*nCnt)++; // 임시 변수에 현재 키 값을 저장
*(quick_arr+nLeft) = *(quick_arr+nIdx_r); (*nCnt)++; // 현재 오른쪽 인덱스에 가지는 값을 처음의 왼쪽 인덱스 값(키 값)에 저장
*(quick_arr+nIdx_r) = nTemp; (*nCnt)++; // 임시 변수에 있는 값(키 값)을 현재 오른쪽 인덱스의 위치에 저장
(*nCnt)++;
quick_sort(quick_arr, nLeft, nIdx_r-1, nCnt); // 재귀 호출하여 반복 (앞쪽)
(*nCnt)++;
quick_sort(quick_arr, nIdx_r+1, nRight, nCnt); // 재귀 호출하여 반복 (뒷쪽)
}
}
// 출력 함수
int print_arr(int* pArr, int nSize, int nCase)
{
int nIdx=0;
// 경우에 따라 출력
printf("%s 출력\n", (nCase==print_array)?"입력 수":(nCase==insertion_sorting)?"삽입 정렬":(nCase==bubble_sorting)?"버블 정렬":(nCase==select_sorting)?"선택 정렬":(nCase==quick_sorting)?"퀵 정렬":"");
puts("==============");
for(nIdx=0; nIdx
{
printf("%3d ", *(pArr+nIdx)); // 출력
}
puts("");
return 0;
}
// 종료 함수
int end_sort(int* pArr)
{
free(pArr); // 입력 포인터 변수 메모리 해제
puts("종료합니다.");
return 0;
}
{
nMin = nIdx_p; nCnt++; // 현재 인덱스를 임시변수(최소값 비교위한 변수)에 저장
for(nIdx_n=nIdx_p+1; nIdx_n
if( nCnt++ && *(select_arr+nMin) > *(select_arr+nIdx_n) ) // 현재 인덱스의 값과 임시변수의 인덱스 값과 비교하여 임시변수가 인덱스의 값이 큰 경우
nMin = nIdx_n; nCnt++; // 현재값이 작으므로 임시변수에 저장
}
nTemp = *(select_arr+nIdx_p); nCnt++; // 전 임시변수(최소값 인덱스) 인덱스의 값을 임시 변수에 저장
*(select_arr+nIdx_p) = *(select_arr+nMin); nCnt++; // 현재 저장된 최소값 임시 변수의 인덱스의 값을 이전 최소값 인덱스에 저장
*(select_arr+nMin) = nTemp; nCnt++; // 임시 변수에 저장된 값을 현재 저장된 최소값 임시 변수의 인덱스에 저장
}
// 빈도수에서 제외
//->>///////////////////////////////////////////////////////////////////////////
print_arr(select_arr, nSize, select_sorting); // 출력 함수 호출
free(select_arr); // 할당된 메모리 해제
///////////////////////////////////////////////////////////////////////////<<-//
return nCnt;
}
// 퀵 정렬 함수
void quick_sort(int* quick_arr, int nLeft, int nRight, int* nCnt)
{
int nIdx_l, nIdx_r, nKey, nTemp;
if( ++(*nCnt) && nLeft < nRight ) // 왼쪽 인덱스가 오른쪽 인덱스보다 작은 경우 (처음에는 인덱스의 첫번째와 마지막번째가 넘어옴)
{
nIdx_l = nLeft + 1; (*nCnt)++; // 왼쪽에서 오른쪽으로 증가할 인덱스의 초기값을 인자로 받은 왼쪽 인덱스+1로 줌
nIdx_r = nRight; (*nCnt)++; // 오른쪽에서 왼쪽으로 증가할 인덱스의 초기값을 인자로 받은 오른쪽 인덱스로 줌
nKey = *(quick_arr+nLeft); (*nCnt)++; // 기준 키값을 인자로 받은 왼쪽 인덱스의 값으로 줌
while( ++(*nCnt) && nIdx_l <= nIdx_r ) // 왼쪽 인덱스가 오른쪽 인덱스보다 작거나 같을 동안 반복하면서
{
while( ++(*nCnt) && *(quick_arr+nIdx_l) < nKey ) // 왼쪽인덱스가 가지는 값과 키 값을 비교하여 인덱스가 가지는 값이 작으면
nIdx_l++; (*nCnt)++; // 왼쪽 인덱스 증가
while( ++(*nCnt) && *(quick_arr+nIdx_r) > nKey ) // 오른쪽 인덱스가 가지는 값과 키 값을 비교하여 인덱스가 가지는 값이 크면
nIdx_r--; (*nCnt)++; // 오른쪽 인덱스 증가
if( ++(*nCnt) && nIdx_l < nIdx_r ) // 위에서 구한 인덱스 왼쪽과 오른쪽을 비교하여 오른쪽 인덱스가 크면
{
// 두 인덱스가 가지는 값을 교환
nTemp = *(quick_arr+nIdx_l); (*nCnt)++; // 왼쪽 인덱스가 가지는 값을 임시 변수에 저장
*(quick_arr+nIdx_l) = *(quick_arr+nIdx_r); (*nCnt)++; // 왼쪽 인덱스가 가지는 값을 오른쪽 인덱스의 값으로 변경
*(quick_arr+nIdx_r) = nTemp; (*nCnt)++; // 오른쪽 인덱스의 값을 임시변수에 저장한 값으로 변경
}
}
// 두 인덱스가 서로 교차되면 (왼쪽 인덱스가 오른쪽 인덱스 보다 커지면)
// 기준 키 값과 변경된 오른쪽 인덱스(왼쪽 인덱스보다 오른쪽 인덱스가 작아진 시작 인덱스)가 가지는 값을 교환
//nTemp = *(quick_arr+nLeft); (*nCnt)++; // 임시 변수에 처음의 왼쪽 인덱스 값(키 값)을 저장
nTemp = nKey; (*nCnt)++; // 임시 변수에 현재 키 값을 저장
*(quick_arr+nLeft) = *(quick_arr+nIdx_r); (*nCnt)++; // 현재 오른쪽 인덱스에 가지는 값을 처음의 왼쪽 인덱스 값(키 값)에 저장
*(quick_arr+nIdx_r) = nTemp; (*nCnt)++; // 임시 변수에 있는 값(키 값)을 현재 오른쪽 인덱스의 위치에 저장
(*nCnt)++;
quick_sort(quick_arr, nLeft, nIdx_r-1, nCnt); // 재귀 호출하여 반복 (앞쪽)
(*nCnt)++;
quick_sort(quick_arr, nIdx_r+1, nRight, nCnt); // 재귀 호출하여 반복 (뒷쪽)
}
}
// 출력 함수
int print_arr(int* pArr, int nSize, int nCase)
{
int nIdx=0;
// 경우에 따라 출력
printf("%s 출력\n", (nCase==print_array)?"입력 수":(nCase==insertion_sorting)?"삽입 정렬":(nCase==bubble_sorting)?"버블 정렬":(nCase==select_sorting)?"선택 정렬":(nCase==quick_sorting)?"퀵 정렬":"");
puts("==============");
for(nIdx=0; nIdx
printf("%3d ", *(pArr+nIdx)); // 출력
}
puts("");
return 0;
}
// 종료 함수
int end_sort(int* pArr)
{
free(pArr); // 입력 포인터 변수 메모리 해제
puts("종료합니다.");
return 0;
}
키워드
추천자료
- 파일의 정렬합병
- Merse Sort(외부정렬) 프로그래밍
- 버블,선형,삽입,2진탐색,최대값,c로알고리즘함수구현
- c 언어를 이용한 성적관리 프로그램
- C 언어 레포트
- 기수정렬
- Heap Sort(힘소트)의 정의 종류 및 우선순위 큐(Priority Queue) 힙 정렬의 방법
- 키정렬 key sort (키소트) 프로그램
- 기본 정렬 과 개선된 정렬 레포트
- 기수정렬과 히프정렬
- [자료구조, Algorithm] 외부정렬(External Sort) PPT version
- 선형시간 선택 알고리즘에 대한 자료 요약/정리 레포트
- report2 - 20개의 data를 입력받아 내림차순으로 정렬하는 프로그램 작성
- C++로 구현한 위상정렬
소개글