#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;
'Language > C & C Plus' 카테고리의 다른 글
[C] 학생 개인성적 평균 구하는 프로그램(조건 까다로움) 2가지 버전 (0) | 2012.07.13 |
---|---|
[C] 회원 도서 대출 관리 프로그램 (0) | 2012.07.13 |
[C] 로또 자동 생성 프로그램 (0) | 2012.07.13 |
[C] 약간 조작한 2진수 8진수 16진수 출력 (0) | 2012.07.13 |
[C] Stack 을 이용한 2진수 8진수 16진수 출력 (0) | 2012.07.13 |