쌓 기 정렬 (최소 쌓 기)

1260 단어 데이터 구조
제목: 최소 더 미 를 이용 하여 숫자 를 정렬 하고 첫 번 째 행위 의 숫자 갯 수, 두 번 째 행위 의 구체 적 인 숫자.14 99 5 36 7 22 17 46 12 2 19 25 28 1 92
코드:
#include int h[101]; int n;
/ / 교환 함수 void swap (int x, int y) {int t; t = h [x]; h [x] = h [y]; h [y] = t;}
/ / 아래 조정 함수 void siftdown (int i) {int t, flag = 0; / i 에 아들 이 있 을 때 flag = 0 시 순환 while (i2 < = n & & flag = = 0) {/ / i 노드 의 값 과 왼쪽 아들 의 값 if (h [i] > h [22]) {t = i * 2;} else t = i;
	//  i      
	if (i*2+1<=n)
	{
		//  i           
		if (h[t]>h[i*2+1])
		{
			t=i*2+1;
		}
	}

	//       ,              
	if (t!=i)
	{
		swap(t,i);
		i=t;
	}
	else flag=1;
}

}
/ / 최소 함수 void creat () {int i; for (i = n / 2; i > = 1; i –) {siftdown (i);}}
/ / 최대 노드 int deletemax () {int t; / t 는 루트 노드 의 값 (즉 번호 가 1 인 값) t = h [1] 을 잠시 저장 합 니 다.
int main () {int i, num; / 노드 수 scanf ("% d", & num); / 읽 은 num 개 수 를 완전히 이 진 트 리 로 저장 합 니 다 for (i = 1; i < = num; i + +) {scanf ("% d", & h [i]);}
n=num;

//                 (   :                )
creat();

//    ,    
for (i=1;i<=num;i++)
{
	printf("%d ",deletemax());
}

return 0;

}
테스트 결과: 1, 2, 5, 7, 12, 17, 19, 22, 25, 28, 36, 46, 92, 99

좋은 웹페이지 즐겨찾기