더미 정렬 이해 전체 코드
                                            
 9350 단어  더미 정렬
                    
/*
<   http://www.wutianqi.com/?p=1820 >
    
* Note:      (Heap Sort)
*/
#include <iostream>
using namespace std;
//           
void PrintArray(int data[], int size)
{
    for (int i=1; i<=size; ++i)
        cout <<data[i]<<"  ";
    cout<<endl;
}
//   ,      
// MaxHeapify a[i]     "  ",
//   i          
void MaxHeapify(int *a, int i, int size)
{
    int lt = 2*i, rt = 2*i+1;
    int largest;
    if(lt <= size && a[lt] > a[i])   //            
        largest = lt;
    else
        largest = i;
    if(rt <= size && a[rt] > a[largest])
        largest = rt;
    if(largest != i)
    {
        int temp = a[i];
        a[i] = a[largest];
        a[largest] = temp;
        MaxHeapify(a, largest, size);
    }
}
//   
//        MaxHeapify      a[1..size]       
//
void BuildMaxHeap(int *a, int size)
{
    for(int i=size/2; i>=1; --i)
        MaxHeapify(a, i, size);
}
//    
//     BuildMaxHeap a[1..size]     
//          a[1],      a[1] a[size]        
//                 ,    MaxHeapify  ,
//  a[1..size-1]     ,a[1]  a[1..size-1]      ,
//  a[1] a[size-1]        。
//     Heapify,            。
//   :         a[1]           ,                 。
//              BuildMaxHeap     size/2 1          ,        a[1]  。
void HeapSort(int *a, int size)
{
    BuildMaxHeap(a, size);
    PrintArray(a, size);
    int len = size;
    for(int i=size; i>=2; --i)
    {
        int temp = a[1];
        a[1] = a[i];
        a[i] = temp;
        len--;
        MaxHeapify(a, 1, len);
        cout << "    :";
        PrintArray(a, size);
    }
}
int main()
{
    int size;
    int arr[100];
    cout << "Input the num of elements:
";
    cin >> size;
    cout << "Input the elements:
";
    for(int i=1; i<=size; ++i)
        cin >> arr[i];
    cout << endl;
    HeapSort(arr, size);
    cout << "    :";
    PrintArray(arr, size);
}
/*
   
Input the num of elements:
10
Input the elements:
50 36 41 19 23 4 20 18 12 22
50  36  41  19  23  4  20  18  12  22
    :41  36  22  19  23  4  20  18  12  50
    :36  23  22  19  12  4  20  18  41  50
    :23  19  22  18  12  4  20  36  41  50
    :22  19  20  18  12  4  23  36  41  50
    :20  19  4  18  12  22  23  36  41  50
    :19  18  4  12  20  22  23  36  41  50
    :18  12  4  19  20  22  23  36  41  50
    :12  4  18  19  20  22  23  36  41  50
    :4  12  18  19  20  22  23  36  41  50
    :4  12  18  19  20  22  23  36  41  50
Process returned 0 (0x0)   execution time : 2.411 s
Press any key to continue.
*/
/*
   
Input the num of elements:
10
Input the elements:
50 36 41 19 23 4 20 18 12 22
4  12  20  18  22  41  50  36  19  23
    :12  18  20  19  22  41  50  36  23  4
    :18  19  20  23  22  41  50  36  12  4
    :19  22  20  23  36  41  50  18  12  4
    :20  22  41  23  36  50  19  18  12  4
    :22  23  41  50  36  20  19  18  12  4
    :23  36  41  50  22  20  19  18  12  4
    :36  50  41  23  22  20  19  18  12  4
    :41  50  36  23  22  20  19  18  12  4
    :50  41  36  23  22  20  19  18  12  4
    :50  41  36  23  22  20  19  18  12  4
Process returned 0 (0x0)   execution time : 2.795 s
Press any key to continue.
*/이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
석 주 - 데이터 구조 - 선택 & 쌓 기 정렬예전 에 내 가 가장 좋아 했 던 것 은 순 서 를 선택 하 는 것 이 었 다. 현재 요소 의 뒤에서 가장 작은 요 소 를 선택 하여 교환 하 는 것 이다. 쌓 기 정렬 은 빠 른 정렬 의 개선 으로 거품 처럼 빠르...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.