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 | #include <stdio.h> #include <time.h> #include <stdlib.h> #define N 10000000 #define R 100000 #define STKSIZE N unsigned int arr[N]; int top = 0; int stack[STKSIZE]; void init_stack() { top = 0; } void push(int i) { if (top < STKSIZE) stack[top++] = i; else { printf("stack full\n"); exit(0); return; } } int pop() { if (top != 0) return stack[--top]; else return 0; } int isStackEmpty() { if (top != 0) return 0; else return 1; } void quickSort() { int p, t; int i, j; int l, r; init_stack(); l = 0; r = N - 1; push(r); push(l); while (!isStackEmpty()) { l = pop(); r = pop(); if (r - l > 0) { p = arr[r]; i = l - 1; j = r; while (1) { while (arr[++i] < p); while (arr[--j] > p); if (i >= j) break; t = arr[i]; arr[i] = arr[j]; arr[j] = t; } t = arr[i]; arr[i] = arr[r]; arr[r] = t; push(r); push(i + 1); push(i - 1); push(l); } } } | cs |
위의 소스코드는 재귀함수를 사용하지 않는 퀵정렬의 소스코드입니다.
재귀함수의 퀵정렬은 데이터 수가 많아지면 재귀 빈도가 높아져서 스택 오버플로우가 발생하는 문제가 있습니다.
그러나 재귀없는 퀵정렬은 그러한 문제가 발생하지 않습니다.
참고:http://danamoni.tistory.com/entry/qsort%EC%97%90-%EA%B4%80%ED%95%9C-%EB%AA%A8%EB%93%A0-%EA%B2%83
'컴퓨터 공학' 카테고리의 다른 글
데이터 과학 프로젝트를 위한 17 가지의 데이터셋 (0) | 2017.03.18 |
---|---|
[퍼옴] __declspec(align(32)) volatile 해석하기 (0) | 2017.03.18 |
밸브 게임 소프트웨어의 멀티코어 사용 (0) | 2017.03.18 |
수학적 모델링 (0) | 2016.12.26 |
논문 작성 프로그램, LaTeX 정보 링크 모음 (0) | 2016.12.26 |