c언어 정렬 알고리즘 소스 입니다. -선택, 버블, 퀵 정렬, 삽입 정렬
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

c언어 정렬 알고리즘 소스 입니다. -선택, 버블, 퀵 정렬, 삽입 정렬에 대한 보고서 자료입니다.

목차

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;
}
  • 가격1,700
  • 페이지수11페이지
  • 등록일2014.06.02
  • 저작시기2014.4
  • 파일형식한글(hwp)
  • 자료번호#947097
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니