2012. 7. 13. 14:41

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

#define MAX 5

void q_sort_pivot_left(int *data,int left,int right) {
        int pivot,i,j;
        int temp;
        if(left<right) {
                i=left;
        j=right+1;
        pivot = data[left];
        do {
                        do {i++;}while(data[i]<pivot);
                        do {j--;}while(data[j]>pivot);
                        if(i<j) {
                                temp = data[i];
                                data[i] = data[j];
                                data[j] = temp;
                                }
                        temp = data[left];
            data[left] = data[j];
            data[j] = temp;
                        }while(i<j);
                q_sort_pivot_left(data,left,j-1);
        q_sort_pivot_left(data,j+1,right);
                }
}

void q_sort_pivot_right(int *data,int left,int right) {
        int pivot,i,j;
        int temp;
        if(left<right) {
                i=left-1;
                j=right;
                pivot = data[right];
                do {
                        do {i++;}while(data[i]<pivot);
                        do {j--;}while(data[j]>pivot);
                        if(i<j) {
                                temp = data[i];
                                data[i] = data[j];
                                data[j] = temp;
                                }
                        temp = data[right];
                        data[right] = data[i];
                        data[i] = temp;
                }while(i<j);
                q_sort_pivot_right(data,left,i-1);
                q_sort_pivot_right(data,i+1,right);
                }
}

void show_quick(int *data,int n) {
        for (int i=0; i<=n-1; i++) {
                printf("\t%d",data[i]);
                }
}



void Insertion_sort(int *data,int n) {
        int temp, i, j;
        for(i=1; i<=n-1; i++) {
                temp = data[i];
                j = i;
                while((data[j-1] > temp) && (j>0)) {
                        data[j] = data[j-1];
                        j--;
            }
                data[j] = temp;
                }
    printf("\n******Insertion Sort******\n");
        for (i=0; i<=n-1; i++) {
                printf("\t%d",data[i]);
                }
}

void selection_sort(int *data,int n) {  
        int temp,min,i,j;
        for(i=0; i<=n-1; i++) {
                min = i;
                for(j=i+1; j<=n-1; j++) {
                        if(data[j] < data[min])
                                min = j;
                        }
                temp = data[min];
                data[min] = data[i];
                data[i] = temp;
                }
        printf("\n******Selction Sort******\n");
        for (i=0; i<=n-1; i++) {
                printf("\t%d",data[i]);
                }
}


void bubble_sort(int *data,int n) {
        int temp, i, j;
        for(i=0; i<=n-1; i++) {
                for(j=i+1; j<=n-1; j++) {
                        if(data[i] > data[j]) {
                                temp = data[i];
                                data[i] = data[j];
                                data[j] = temp;
                                }
                        }
                }
        printf("\n******Bubble Sort******\n");
        for (i=0; i<=n-1; i++) {
                printf("\t%d",data[i]);
                }
}
        

int main() {
        int data[MAX];
        while(1) {
                for (int i=0; i<MAX ; i++) {
                printf("\nData[%d]값을 입력하시오(5개) : ",i);
                scanf("%d",&data[i]);
                }
                int select;
                printf("\n====================================================================");
                printf("\n1)Bubble 2)Selection 3)Insertion 4)Quick right 5)Quick left 6)Exit");
                printf("\n====================================================================");
                printf("\ncommand> ");
                scanf("%d",&select);
                switch(select) {
                case 1 :
                        bubble_sort(data,sizeof(data)/sizeof(int));
                        break;
                case 2 :
                        selection_sort(data,sizeof(data)/sizeof(int));
                        break;
                case 3 :
                        Insertion_sort(data,sizeof(data)/sizeof(int));
                        break;
                case 4 :
                        q_sort_pivot_right(data,0,sizeof(data)/sizeof(int)-1); //전체 배열의 크기에서 -1
                        show_quick(data,sizeof(data)/sizeof(int));
                        break;
                case 5 :
                        q_sort_pivot_left(data,0,sizeof(data)/sizeof(int)); //전체배열의 크기
                        show_quick(data,sizeof(data)/sizeof(int));
                        break;
                case 6 :
                        exit(1);
                }
        }
        return 0;

Posted by 몰라욧