간만에 포인터도 연습할 겸 배열 인덱스 안쓰고 포인터를 이용해서 퀵소트를 구현하려 하는데..미묘하게 원하는 결과가 않나오네요...
#include<stdio.h>
void swap(int *a, int *b);
void quickSort(int *first, int *last);
int* partition(int *first, int *last);
void print(int *a, int *b){
int i,size=(b-a)+1;
for (i = 0; i < size; i++)
printf("%d ", a[i]);
printf("\n");
}
int main(){
int i, size = 10;
int arr[10] = { 25, 15, 1, 23, 47, 10, 16, 64, 75, 20};
printf("정렬 전 배열\n");
for (i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
quickSort(arr, arr + size - 1);
printf("\n정렬 후 배열\n");
for (i = 0; i < size; i++)
printf("%d ", arr[i]);
return 0;
}
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
void quickSort(int *first, int *last){
int* pivot;
if (first<last){
pivot = partition(first, last);
print(first, last);
quickSort(first, pivot - 1);
quickSort(pivot+1, last);
}
}
int* partition(int *first, int *last){
int pivot = *first;
int* savefirst = first;
first++;
while (first < last){
while (*first < pivot)
first++;
while (*last > pivot)
last--;
if(first < last)
swap(first, last);
}
swap(savefirst, last);
return last;
}
요 partition마지막 스왑을 어떻게 처리해야 할지 모르겠습니다.. 이 스왑때문에 결과가 잘 안나오네요 ..피벗 전후로 2개가 있으면 괜찮은데... 1개가 있으면 제일 밑 스왑때문에....정렬된것도 바뀌네요
댓글 0