2018. 12. 16. 23:51 C,C++ 코드

퀵 정렬 함수

#include <iostream>
#include <cstring>
using namespace std;

template<typename T, size_t s>
inline size_t arsize(T (&a)[s]){return s;}

void quick_sort(int* arr, int left, int right) {
	
    //단순 삽입 정렬 이용해 처음, 가운데, 끝 요소를 오름차순 정렬함
    int tmp[3]={left, (left+right)/2, right};
    for(int i=1;i<3;i++){
    	int t=arr[tmp[i]], j=i;
    	for(; j>0 && arr[tmp[j-1]]>t; j--)
    		arr[tmp[j]]=arr[tmp[j-1]];
    	arr[tmp[j]]=t;
    }
    //가운데 요소와 끝에서 2번째 요소 교환
    swap(arr[tmp[1]], arr[right-1]);
    //이후 정렬 범위는 축소되고 끝에서 2번째 값을 피벗으로 설정
    int pl=left+1, pr=right-2, pivot=arr[right-1];
    //이유는 위에서 수행한 세요소의 정렬때문에 a[left]는 피벗 이하
    //a[right-1], a[right]는 피벗 이상의 값인게 확정됨
    
    while (pl<= pr) {
        while (arr[pl] < pivot)
            pl++;
        while (arr[pr] > pivot)
            pr--;
        if (pl<= pr)
        {
            swap(arr[pl], arr[pr]);
            pl++;
            pr--;
        }
    }

    if (left < pr)
        quick_sort(arr, left, pr);

    if (pl < right)
        quick_sort(arr, pl, right);
}

int main() {
	// your code goes here
	int a[]={1,5,85,8,0,-10,32};
	cout<<"정렬 전\n";
	for(int i=0;i<arsize(a);i++)
		cout<<a[i]<<' ';
	cout<<'\n';
	
	quick_sort(a, 0, arsize(a)-1);
	
	cout<<"정렬 후\n";
	for(int i=0;i<arsize(a);i++)
		cout<<a[i]<<' ';
	cout<<'\n';	
	return 0;
}


'C,C++ 코드' 카테고리의 다른 글

single linked list  (0) 2018.12.25
하노이 탑 코드  (0) 2018.12.23
인라인 코드 테스트  (2) 2018.12.22
진자 운동 코드  (0) 2018.12.22
문자열 알고리즘 시간 측정 코드  (0) 2018.12.16
Posted by Semi Developer

블로그 이미지
C++ 코드 저장용도
Semi Developer

태그목록

Yesterday
Today
Total

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함