C언어 버킷정렬 구현

1 개요[ | ]

C언어 버킷정렬 구현
#include <stdio.h>
void quick_sort(float a[], int L, int R) {
    int left, right;
    float pivot = a[L];
    for(left=L,right=R; left<right; right--) {
        while( a[right]>=pivot && left<right ) right--;
        if( left<right ) a[left] = a[right];
        while( a[left]<=pivot && left<right ) left++;
        if( left>=right ) break;
        a[right] = a[left];
    }
    a[left]=pivot;
    if(left>L) quick_sort(a, L, left-1);
    if(left<R) quick_sort(a, left+1, R);
}
void bucket_sort(float a[], int size) {
    float buckets[size][size];
    int i, j, pos, bi, buckets_size[size];
    for(i=0; i<size; i++) {
        buckets_size[i] = 0;
        for(j=0; j<size; j++) buckets[i][j] = 9999;   
    }
    for(i=0; i<size; i++) {
        bi = (int)(size*a[i]);
        buckets[bi][buckets_size[bi]] = a[i];
        buckets_size[bi]++;
    }
    for(i=0; i<size; i++) {
        quick_sort(buckets[i], 0, buckets_size[i]-1);
    }
    pos = 0;
    for(i=0; i<size; i++) {
        for(j=0; j<buckets_size[i]; j++) {
            a[pos++]=buckets[i][j];
        }
    }
}
int main() {
	float arr[] = {0.9, 0.1, 0.22, 0.99, 0.0, 0.4, 0.22};
	int size = sizeof(arr)/sizeof(int);
	bucket_sort(arr, size);
	for(int i=0; i<size; i++) printf("%.2f ", arr[i]);
	// 0.00 0.10 0.22 0.22 0.40 0.90 0.99 
}

2 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}