석 주 - 데이터 구조 - 선택 & 쌓 기 정렬
예전 에 내 가 가장 좋아 했 던 것 은 순 서 를 선택 하 는 것 이 었 다. 왜냐하면 그것 은 가장 쉽게 이해 할 수 있 기 때문이다. 현재 요소 의 뒤에서 가장 작은 요 소 를 선택 하여 교환 하 는 것 이다.
void SelectionSort(int a[],int n)
{
int i,j,min; //min
for(i=0;i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
{
if(a[min]>a[j]) min=j; //
}
if(min!=i) Swap(a[i],a[min]); // ->
}
}
2. 쌓 기 정렬
쌓 기 정렬 은 빠 른 정렬 의 개선 으로 거품 처럼 빠르다.단일 변수 i * = 2 와 관련 되 기 때문에 i 의 아래 표 지 는 1 부터 만 시작 할 수 있 고 쌓 기 순 서 는 2 단계 로 나 눌 수 있 습 니 다.
무더기로 쌓다
마지막 분기 노드 (length / 2) 부터 아이의 노드 와 비교 하여 큰 것 을 찾 으 면 교환 합 니 다.이렇게 정점 에 이 르 면 큰 무 더 기 를 얻 을 수 있다.
void HeapSort(int a[],int n)
{
// (length/2) , ,
// ,
for(int i=n/2;i>0;i--)
{
AdjustDownFill(a,i,n);
}
//
for(int i=n;i>1;i--)
{
Swap(a[i],a[1]);
AdjustDownFill(a,1,i-1);
}
}
더 미 를 조정 할 때 정점 은 가장 큰 노드 로 말단 노드 와 교환 합 니 다.말단 노드 는 최대 노드 가 되 고 말단 노드 를 부 드 럽 게 삭제 합 니 다.정점 에서 아래로 계속 조정 하여 새로운 지붕 더 미 를 얻다.이렇게 반복 하면 한 노드 가 남 을 때 까지 하면 된다.
다음은 교환 에 기초 한 사상 이다.
void AdjustDownSwap(int a[],int k,int n)
{
for(int i=k*2;i<=n;i*=2) //
{
if(i<n && a[i]<a[i+1]) i++; // ,
if(a[i]<=a[k]) break; // ,
Swap(a[k],a[i]); //
}
}
빠 른 정렬 과 마찬가지 로 교환 하 는 사상 은 자 리 를 채 우 는 사고 로 개선 할 수 있다.
void AdjustDownFill(int a[],int k,int n)
{
a[0]=a[k];
for(int i=k*2;i<=n;i*=2) //
{
if(i<n && a[i]<a[i+1]) i++; // ,
if(a[i]<=a[0]) break; // ,
a[k]=a[i]; //
k=i; //
}
a[k]=a[0]; // a[0]
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.