본문 바로가기

데이터구조/소스코드

Quick sort 소스코드

반응형
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <stdio.h>

#define SZ 11
//int a[SZ] = {35, 40, 50, 60, 70, 14, 100, 3, 4, 5, 6};
int a[SZ] = { 35, 40, 40, 40, 40, 40, 4, 4, 3, 4, 4 };

void showAll()
{
	for (int i = 0; i < SZ; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
}

void swap(int x, int y)
{
	int temp = a[x];
	a[x] = a[y];
	a[y] = temp;
}

void qsort(int pivot, int _left, int _right)
{
	printf("Debug:: ");
	showAll();
	int left = _left;
	int right = _right;

	if (pivot > _right)  // no data to be sorted
	{
		return;
	}

	if (pivot == _right)  // there is only one data
	{
		return;
	}

	// there is only two data
	if (pivot < _right && _left == _right)
	{
		if (a[pivot] > a[_right])
		{
			swap(pivot, _right);
		}
		return;
	}

	while (1)
	{
		while (a[pivot] >= a[left] && left <= _right)
		{
			left++;
		}
		while (a[pivot] < a[right] && right >= pivot)
		{
			right--;
		}
		if (left < right)
		{
			swap(left, right);
		}
		else
		{
			swap(pivot, right);
			qsort(pivot, pivot+1, right-1);
			qsort(right+1, right+2, _right);
			return;
		}
	}
}

int main(void)
{
	showAll();
	qsort(0, 1, 10);
	printf("After sorting------------------------\n");
	showAll();
	return 0;
}
반응형

'데이터구조 > 소스코드' 카테고리의 다른 글

Hasing 예제코드  (0) 2016.05.30
Priority Queue, Min Heap  (0) 2016.05.16
BST를 이용한 영어/한글 단어관리 프로그램 소스  (0) 2016.05.09
OJ 1161  (0) 2016.04.25
OJ 1160  (0) 2016.04.25