[C언어 알고리즘] 3.3.3 퀵 정렬 알고리즘 소스 코드
//퀵 정렬(Quick Sort)
#include <stdio.h>
#define SWAP(a,b) {int t; t = a; a=b; b=t;}//a와 b를 교환
int *origin;
int on;
void QuickSort(int *base, int n);
void ViewArr(int *arr, int n);
int main(void)
{
int arr[10] = { 9,4,3,10,5,8,7,6,2,1 };
origin = arr;
on = 10;
ViewArr(arr, 10);
QuickSort(arr, 10);
ViewArr(arr, 10);
return 0;
}
void PrintSpace(int n);
void QuickSort(int *base, int n)
{
int pivot = 0; // 피벗의 위치 기억하는 변수
int left = 0, right = 0; // 피벗보다 큰 값과 작은 값의 위치를 찾기위한 변수
if (n <= 1)
{
return;
}
left = 0;
right = n;
while (1)
{
for (left++; (left<n) && (base[0] >= base[left]); left++);
for (right--; (right>0) && (base[0]<base[right]); right--);
if (left<right)
{
SWAP(base[left], base[right]);
PrintSpace(base - origin);
ViewArr(base, n);
}
else
{
break;
}
}
SWAP(base[0], base[right]);
PrintSpace(base - origin);
ViewArr(base, n);
QuickSort(base, right);
QuickSort(base + left, n - left);
}
void PrintSpace(int n)
{
int i = 0;
for (i = 0; i<n; i++)
{
printf(" ");
}
}
void ViewArr(int *arr, int n)
{
int i = 0;
for (i = 0; i<n; i++)
{
printf("%2d ", arr[i]);
}
printf("\n");
}
'언어 자료구조 알고리즘 > 디딤돌 알고리즘 (C언어)' 카테고리의 다른 글
[C언어 알고리즘] 3.4.4 이진 탐색 트리 소스 코드 (1) | 2016.11.30 |
---|---|
[C언어 알고리즘] 3.4.3 이진 탐색 트리 구현 (0) | 2016.11.30 |
[C언어 알고리즘] 3.4.2 이진 탐색 트리(Binary Search Tree) (0) | 2016.11.30 |
[C언어 알고리즘] 3.4.1 트리의 용어 (0) | 2016.11.30 |
[C언어 알고리즘] 3.4 이진 탐색 트리 (0) | 2016.11.30 |
[C언어 알고리즘] 3.3.2 퀵 정렬 알고리즘 구현 (0) | 2016.11.30 |
[C언어 알고리즘] 3.3.1 퀵 정렬 알고리즘 성능 분석 (0) | 2016.11.30 |
[C언어 알고리즘] 3.3 퀵 정렬(Quick Sort) 알고리즘 (0) | 2016.11.30 |
[C언어 알고리즘] 3.2.3 하노이 타워 알고리즘 소스 코드 (0) | 2016.11.30 |
[C언어 알고리즘] 3.2.2 하노이 타워 알고리즘 구현 (0) | 2016.11.30 |