Transcript Quick Sort

Quick Sort
임창민, 신현진
목차
• 퀵 정렬의 정의
• 퀵 정렬의 예시
• 퀵 정렬의 소스
퀵 정렬의 정의
• 퀵 정렬(Quicksort)은 C. A. R. 호어가 개발
한 정렬 알고리즘으로, 다른 원소와의 비교
만으로 정렬을 수행하는 비교 정렬에 속한다.
하나의 커다란 입력 데이터의 집합을 정렬하는 것보다는
두 개의 작은 입력 데이터들을 정렬하는 것이 빠르다는
일반적인 사실에 바탕을 둠
퀵 정렬의 예시
피벗은 p, 리스트를 반으로 나눈 각 값에 대한 인덱스를 각각 Ieft, right라고 둔다.
5 - 3 - 7 - 6 - 2 - 1 - 4(p)
1(left)
5(i)- -33- -77- -66- -22–- 5(right)
1(j) - 4(p)
- 4(p)
1 - 3(left) - 7 - 6 - 2(right) - 5 - 4(p)
1 - 31 -- 2(left)
3 - 7(i)--66--7(right)
2(j) - 5 -- 4(p)
5 - 4(p)
1 - 3 - 2 –- 64(p)
- 7 - 75 -–54(p)
–6
1-2-3-4-5-6–7
퀵 정렬 소스
피벗값을
재귀함수를
지정하고
호출해값을
배열을
바꾸는
계속나눠
함수 partition
주는 QuickSort 함수
int partition(int arr[] , int left , int right){
void QuickSort(int arr[] ,int left , int right){
int first = left;
if(left < right){
int pivot = arr[first];
int center = partition(arr , left , right);
left++;
}
QuickSort(arr,left,center-1);
QuickSort(arr,center+1 , right);
while(left <= right){
}
while(arr[left] <= pivot){
left++;
}
while(arr[right] > pivot){
right--;
}
실질적인 main 함수
int main(){
}
}
if(left < right){
int arr[] = {6,4,3,2,1,7,9,8,5,10,5,4,2,1,9};
swap(&arr[left]
, &arr[right]);
int size = sizeof(arr) / sizeof(int)
- 1;
}
puts(“정렬 전 배열");
printarr(arr , size);
else
break;
QuickSort(arr , 0 , size);
}puts(”정렬 후 배열");
printarr(arr , size);
swap(&arr[first] , &arr[right]);
return 0;
return right;