Quick Sort 구현
22392 단어 CQuick SortC
퀵소트는 아래 두가지 연산이 중요
- Pivot
- Partition
두가지 구현 방법
1
브라이언 커니핸(무려 K&R의 K에 해당하는 사람)이 쓴 책 프로그래밍 수련법책에서 참고한 코드인데, 구현이 매우 간단하고 좋다. 비교 대상의 값을 맨 앞으로 보내고 풀이하는 방법.
#include <stdio.h>
#define ARR_SIZE30
int arr[ARR_SIZE] = {23, 46, 3, 19, 7, 2, 770, 450, 50, 78,
1230, 1460, 130, 150, 270, 320, 377, 345, 35, 31,
230, 460, 30, 50, 70, 20, 77, 45, 5, 1};
void swap(int arr[], int a, int b);
void quick_sort(int arr[], int n)
{
int pivot, i;
if (n <= 1) /* base case */
return;
swap(arr, 0, (n/2)); /* move standard value(middle) to 0 idx*/
pivot = 0;
for (i = 1; i < n; i++)
if (arr[i] < arr[0]) /* if arr[i] is less than standard value */
swap(arr, ++pivot, i); /* put arr[i] on the left side of pivot */
swap(arr, 0, pivot); /* recover standard value */
quick_sort(arr, pivot); /* recursive call left side */
quick_sort(arr + pivot + 1, n - pivot -1); /* recursive call right side */
}
void print_arr(int arr[]);
int main(int argc, char *argv[])
{
print_arr(arr);
quick_sort(arr, ARR_SIZE);
print_arr(arr);
return 0;
}
2
pivot기준으로 양단의 값을 끝에서 가운데로 좁히면서 swap하는 방법.
#include <stdio.h>
void swap(int arr[], int a, int b);
int partition(int arr[], int left, int right);
int array[] = {3,4,1,5,43,12,321,35,6,876,100,83,923,38,91,611,892,999,37};
void quick_sort(int arr[], int left, int right)
{
if (left < right) {
int pivot = partition(arr, left, right);
quick_sort(arr, left, pivot - 1);
quick_sort(arr, pivot + 1, right);
}
}
int partition(int arr[], int left, int right)
{
int pivot = arr[(left + right) / 2];
while (left <= right) {
while (arr[left] < pivot) left++;
while (arr[right] > pivot) right--;
if (left <= right)
swap(arr, left++, right--);
}
return left;
}
void swap(int arr[], int a, int b)
{
int tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
}
void print_arr(int arr[])
{
for (int i = 0; i < ARR_SIZE; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main(int argc, char *argv[])
{
int sizea = sizeof(array) / sizeof(int);
printf("before\n");
for (int i = 0; i < sizea; i++)
printf("%d ", array[i]);
quick_sort(array, 0, sizea - 1);
printf("\nafter\n");
for (int i = 0; i < sizea; i++)
printf("%d ", array[i]);
printf("\n");
return 0;
}
Author And Source
이 문제에 관하여(Quick Sort 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@soopsaram/Quick-Sort-구현저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)