본문 바로가기
Coding/C

[C] Quick Sort

by 暻煥 2025. 11. 15.

                  

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

#define MAX_NUM 100

struct data {
	int val;
};

struct data input[MAX_NUM];
struct data* ptrs[MAX_NUM];
int num = 10;

void quickSort_ascending(struct data* arr[], int first, int last)
{
	int pivot, i, j;
	struct data* temp;

	if (first < last)
	{
		pivot = first;
		i = first;
		j = last;

		while (i < j)
		{
			while (arr[i]->val <= arr[pivot]->val && i < last)
				i++;
			while (arr[j]->val > arr[pivot]->val)
				j--;
			if (i < j)
			{
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}

		temp = arr[pivot];
		arr[pivot] = arr[j];
		arr[j] = temp;

		quickSort(arr, first, j - 1);
		quickSort(arr, j + 1, last);
	}
}

void quickSort_descending(struct data* arr[], int first, int last)
{
	int pivot, i, j;
	struct data* temp;

	if (first < last)
	{
		pivot = first;
		i = first;
		j = last;

		while (i < j)
		{
			while (arr[i]->val >= arr[pivot]->val && i < last)
				i++;
			while (arr[j]->val < arr[pivot]->val)
				j--;
			if (i < j)
			{
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}

		temp = arr[pivot];
		arr[pivot] = arr[j];
		arr[j] = temp;

		quickSort(arr, first, j - 1);
		quickSort(arr, j + 1, last);
	}
}

void printResult(struct data* arr[])
{
	for (int i = 0; i < num; ++i)
	{
		printf("%d ", arr[i]->val);
	}
	printf("\n");
}

int main(void)
{	
    for (int i = 0; i < num; i++)
    {
    	input[i].val = rand();
        ptrs[i] = &input[i];  // 포인터 배열 초기화
    }

    quickSort_ascending(ptrs, 0, num - 1);
    // quickSort_descending(ptrs, 0, num - 1);

    printf("#%d ", test_case);
    printResult(ptrs);

	return 0;
}

                       

'Coding > C' 카테고리의 다른 글

[C] Priority Queue  (0) 2025.11.16
[C] Heap의 특정 index 값 수정  (1) 2024.02.07
[C] AVL Tree  (0) 2024.02.05
[C] RB Tree 구현  (1) 2024.02.05