2011. 11. 1. 20:48
퀵정렬, 퀵소트, Quick sort 를 구현해보았다.
실행화면
소스코드
#include<stdio.h> #include<stdlib.h> void shuffle(int *arr); void swap(int *a, int *b); void print(int * arr, int st, int ed); void quick(int *arr); void partition(int *arr,int _st, int _ed); int main(int argc, char *argv[]) { int arr[16]; for(int r=0; r<50; r++){ for(int i=0; i<16; i++){ arr[i] = i; } srand(r); shuffle(arr); printf("%10s : ","shuffle"); print(arr,0,15); quick(arr); printf("%10s : ","quick"); print(arr,0,15); printf("=============================================================\n"); //break; } system("pause > nul"); return 0; } void quick(int *arr){ partition(arr,0,15); } void partition(int *arr,int _st, int _ed){ int p = _ed; int buf_p = arr[p]; int st=_st,ed=_ed-1; while(st<ed){ //if(st<p){ if( arr[st]<arr[p]){ st++; continue; } if( arr[ed]>arr[p]){ ed--; continue; } if( arr[st] > arr[ed]){ swap(arr+st, arr+ed); } } //printf("st=%d,ed=%d,p=%d\n",st,ed,p); if( st < p ){ if( arr[st]>arr[p]){ swap(arr+st, arr+p); int t = p; p = st; st = t; } } st = _st; ed = _ed; printf("(%2d)%6s : ",buf_p,"quick"); print(arr,st,ed); if (st < p) partition(arr, st, p-1); if (ed > p) partition(arr, p+1, ed); } void shuffle(int *arr){ int n = 100; int a,b; while(n--){ a = rand()%16; b = rand()%16; swap(arr+a,arr+b); } } void swap(int *a, int *b){ int t = *a; *a = *b; *b = t; } void print(int * arr, int st, int ed){ for(int i=0; i<16; i++){ if( st<=i && i<=ed){ printf("%3d",arr[i]); } else{ printf(" "); } }printf("\n"); }
참고자료
http://ko.wikipedia.org/wiki/%ED%80%B5_%EC%A0%95%EB%A0%AC#.EC.95.8C.EA.B3.A0.EB.A6.AC.EC.A6.98
'c/c++' 카테고리의 다른 글
[c언어] 변수 초기화 (0) | 2011.11.02 |
---|---|
[c언어] 상수 타입과 리터럴 타입 (0) | 2011.11.02 |
[c언어] <math.h>의 sqrt()를 이용하지 않고 제곱근 구하기 (0) | 2011.11.01 |
[c언어] 2차원 배열 동적 할당하기 (23) | 2011.11.01 |
[download] 무료 컴파일러 다운로드 (1) | 2011.11.01 |