카테고리 없음

[C/알고리즘] 퀵정렬 Quick Sort

미친토끼 2021. 3. 2. 13:34
// 퀵정렬 quickSort.c

#include <stdio.h>
#include <stdlib.h>

// int형 두개를 맞바꿔주는 함수.
void int_swap(int *x, int *y) {
	int tmp = *x;

	*x = *y;
	*y = tmp;
}

// long int형 두개를 맞바꿔주는 함수.
void long_swap(long *x, long *y) {
   long tmp = *x;
   *x = *y;
   *y = tmp;
}

// 배열의 내용을 출력한다.
void printArray(int *array, int length) {
    for (int i = 0; i < length; i++) {
        printf("%d\n", array[i]);
    }
    printf("\n");
}

int quick_sort(int *array, int start, int end) {

	if (start >= end) return 0;
	int pivot = start;
	int left = start + 1;
	int right = end;
	int tmp;

	while (left <= right) {
		while (left <= end && array[left] <= array[pivot]) {
			left++;
		}
		while (right > start && array[right] >= array[pivot]) {
			right--;
		}
		if (left > right) {
			int_swap(&array[right], &array[pivot]);
		}
		else {
			int_swap(&array[left], &array[right]);
		}
	}
	quick_sort(array, start, right - 1);
	quick_sort(array, right + 1, end);

	return 0;
}


int main() {
	// int num[] = { 5, 7, 9, 0, 3, 1, 6, 2, 4, 8 };
    // const int length = sizeof(num) / sizeof(int);
    const int length = 1000;
    int *num = calloc(length, sizeof(int));

 	for (int i = 0; i < length; i++)
		num[i] = rand();

	quick_sort(num, 0, length-1);
    printArray(num, length);

	free(num);
	return 0;
}
------실행 결과---------

2416949
6072641
6939507
7684930
8936987
10901063
11614769
11671338
12260289
12895151
14989683
........
2118421993
2130794395
2135019593
2137100237
2137390358
2142757034
2143124030
2145174067
2147469841