"퀵정렬 구현"의 두 판 사이의 차이

16번째 줄: 16번째 줄:
while( arr[++left] < pivot ) {}
while( arr[++left] < pivot ) {}
while( right>0 && arr[--right]>pivot ) {}
while( right>0 && arr[--right]>pivot ) {}
if( left>=right ) break;
if( left >= right ) break;
swap( left, right );
swap( left, right );
}
}

2018년 7월 15일 (일) 10:45 판

1 C

#include <stdio.h>
#define SIZE 10
int arr[SIZE] = {3,4,2,1,7,5,8,9,0,6};
void swap(int i, int j) {
	int temp = arr[i];
	arr[i] = arr[j];
	arr[j] = temp;
}
int partition(int left, int right, int pivot) {
	int original_right = right;
	while(1) {
		while( arr[++left] < pivot ) {}
		while( right>0 && arr[--right]>pivot ) {}
		if( left >= right ) break;
		swap( left, right );
	}
	swap( left, original_right );
	return left;
}
void quick_sort(int left, int right) {
	if(right-left <= 0) return;   
	int partition_point = partition(left-1,right,arr[right]);
	quick_sort( left, partition_point-1 );
	quick_sort( partition_point+1, right );
}
int main() {
	quick_sort(0,SIZE-1);
	for(int i=0; i<SIZE; i++) printf("%d ",arr[i]);
	// 0 1 2 3 4 5 6 7 8 9 
}

2 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}