중위값을 이용한 퀵정렬 개선에 대한 질문입니다.
글쓴이: canuyes / 작성시간: 월, 2013/01/28 - 2:49오후
중위값(median of three)을 이용한 퀵정렬을 공부하고 있습니다.
구글링을 통해 여러가지 방법을 찾아 보았지만 만족할 만한 답을 얻지 못해서
한번 스스로 작성 해보았습니다.
#include<iostream> using namespace std; void swap(int& ref1,int& ref2){ int temp=ref1; ref1=ref2; ref2=temp; return; } void median(int* arr,int left,int right){ if(arr[left]>arr[(left+right)/2]){swap(arr[left],arr[(left+right)/2]);} if(arr[left]>arr[right]){swap(arr[left],arr[right]);} if(arr[(left+right)/2]>arr[right]){swap(arr[(left+right)/2],arr[right]);} swap(arr[left],arr[(left+right)/2]); return; } int partition(int* arr,int left,int right){ median(arr,left,right); int first=left; int pivot=arr[first]; left++; while(left<=right){ while(left<right&&arr[left]<=pivot){left++;} while(left<=right&&arr[right]>=pivot){right--;} if(left<right){swap(arr[left],arr[right]);} else{break;} } swap(arr[first],arr[right]); return right; } void quick_sort(int* arr,int left,int right){ if(left<right){ int index=partition(arr,left,right); quick_sort(arr,left,index-1); quick_sort(arr,index+1,right); } return; } int main(void){ int N,*arr; cin>>N; arr=new int[N]; for(int i=0;i<N;i++){cin>>arr[i];} quick_sort(arr,0,N-1); for(int i=0;i<N;i++){cout<<arr[i]<<" ";} delete []arr; system("PAUSE"); return 0; }
그런데, 아무래도 실력이 모자르다 보니
제 코드가 과연 개선이 된 코드인지 의문이 생깁니다.
구글링해서 찾아본 코드와는 여러모로 좀 다른 모양을 띄고 있습니다.
median of three의 개념과 원리를 잘 구현한 코드가 맞는지 알고 싶습니다.
Forums:
댓글 달기