힐 정렬, 빠 른 정렬, 쌓 기 정렬

최근 에는 데이터 구조의 시험 을 준비 하 다 블 로그 로 자신의 복습 과정 을 기록 했다.오늘 의 내용 은 세 가지 고급 정렬 이다.힐 정렬 은 시퀀스 의 증 가 량 이 incr [k] = 2 (t - k + 1) - 1 일 때 시간 복잡 도 는 O (n1.5) 이다.시퀀스 증분 으로 그룹 을 나 누 어 각 그룹의 크기 를 조정 합 니 다.
template
void ShellInsert(T elem[],int n,int incr)
{
	for(int i=incr;i=0&&e
void ShellSort(T elem[],int n,int incr[],int t)
{
	for(int k=0;k

빠 른 정렬 빠 른 정렬 은 모든 같은 수량 급 O (nlogn) 의 정렬 알고리즘 에서 평균 성능 이 가장 좋 은 것 으로 인 정 받 지만, 원래 서열 이 질서 가 있 을 때 빠 른 정렬 은 거품 정렬 으로 탈바꿈 하고 시간 복잡 도 는 O (n ^ 2) 입 니 다.
template
int Patition(T elem[],int low,int high)
{//                  ,        。
	while(low
void QuickSortHelp(T elem[],int low,int high)
{//      
	int pos=Partition(elem,low,high);
	QuickSortHelp(elem,low,pos-1);
	QuickSortHelp(elem,pos+1,high);
}
template
void QuickSort(T elem[],int n)
{
	QuickSortHelp(elem,0,n-1);
}

쌓 기 정렬 최 악의 경우 시간 복잡 도 는 O (nlogn) 이 고 임시 교환 에 사용 할 임시 저장 공간 만 차지 합 니 다.
template
void SiftAdjust(int elem[],int high,int low)
{//elem  elem[low]        ,  elem[low]       
	for(int f=low,i=2*f+1;i<=high;i=2*i+1)
	{	
		if(i=elem[i])
			break;
		Swap(elem[f],elem[i]);
		f=i;
	}
}
template
void HeapSort(int elem[],int n)
{//            ,                ,        
	int i;
	for(i=(n-2)/2;i>=0;i--)
		SiftAdjust(i,n-1);
	for(i=n-1;i>=0;i--)
	{
		Swap(elem[0],elem[i]);
		SiftAdjust(0,i-1);
	}
}
		

좋은 웹페이지 즐겨찾기