9 도 OJ 1202 정렬 - 쌓 기 정렬
제목 설명:
입력 한 n 개 수 를 정렬 하고 출력 합 니 다.
입력:
입력 한 첫 줄 은 정수 n (1 < = n < = 100) 을 포함 합 니 다. 다음 줄 은 n 개의 정 수 를 포함한다.
출력:
여러 그룹의 테스트 데이터 가 있 을 수 있 습 니 다. 각 그룹의 데이터 에 대해 정렬 된 n 개의 정 수 를 출력 하고 각 수의 뒤에 빈 칸 이 있 습 니 다. 각 그룹의 테스트 데이터 결과 가 한 줄 을 차지한다.
샘플 입력:
4
1 4 3 2
샘플 출력:
1 2 3 4
#include <stdio.h>
#include <stdlib.h>
void HeapSort(int Array[], int len);
void BuildMaxHeap(int Array[], int len);
void ShiftDown(int Array[], int index, int len);
void Swap(int *m, int *n);
int main(void){
int len;
int * Array;
int i;
while (scanf("%d", &len) != EOF){ //
Array = (int *)malloc(sizeof(int) * (len+1));
for (i=1; i<=len; ++i) //
scanf("%d", &Array[i]);
BuildMaxHeap(Array, len);
HeapSort(Array, len);
for (i=1; i<=len; ++i)
printf("%d ", Array[i]);
printf("
");
free(Array);
}
return 0;
}
void HeapSort(int Array[], int len){
int i;
int time = len;
for (i=0; i<len; ++i){
Swap(&Array[1], &Array[time]);
--time;
ShiftDown(Array, 1, time);
}
}
void BuildMaxHeap(int Array[], int len){
int index = len/2;
for (; index>0; --index){
ShiftDown(Array, index, len);
}
}
void ShiftDown(int Array[], int index, int len){
while ((2*index) <= len || (2*index+1) <= len){
if (2*index+1 <= len){
if (Array[index] < Array[2*index] ||
Array[index] < Array[2*index+1]){
if (Array[2*index] > Array[2*index+1]){
Swap(&Array[index], &Array[2*index]);
index = 2*index;
}
else{
Swap(&Array[index], &Array[2*index+1]);
index = 2*index + 1;
}
}
else
break;
}
else{
if (Array[index] < Array[2*index]){
Swap(&Array[index], &Array[2*index]);
index = 2*index;
}
else
break;
}
}
}
void Swap(int *m, int *n){ //
int tmp;
tmp = *m;
*m = *n;
*n = tmp;
}
참고 자료:http://blog.csdn.net/v_july_v/article/details/6198644
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
석 주 - 데이터 구조 - 선택 & 쌓 기 정렬예전 에 내 가 가장 좋아 했 던 것 은 순 서 를 선택 하 는 것 이 었 다. 현재 요소 의 뒤에서 가장 작은 요 소 를 선택 하여 교환 하 는 것 이다. 쌓 기 정렬 은 빠 른 정렬 의 개선 으로 거품 처럼 빠르...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.