geeksforgeeks-heap sort

heap sort讲解:http://www.geeksforgeeks.org/heap-sort/

测验

The task is to complete heapify() and buildHeap() functions which are used to implement Heap Sort.

Input:
First line of the input denotes number of test cases 'T'. First line of the test case is the size of array and second line consists of array elements.

Output:
Sorted array in ascending order.

Constraints:
1 <=T<= 50
1 <=N<= 1000
1 <=arr[i]<= 1000

Example:

Input:
2
5
4 1 3 9 7
10
10 9 8 7 6 5 4 3 2 1

Output:
1 3 4 7 9
1 2 3 4 5 6 7 8 9 10

C++

/*
Please note that it's Function problem i.e.
you need to write your solution in the form of Function(s) only.
Driver Code to call/invoke your function would be added by GfG's Online Judge.*/


/* Main function to do heap sort. This function uses buildHeap()
   and heapify()
void heapSort(int arr[], int n)  {
    buildHeap(arr, n);
    for (int i=n-1; i>=0; i--)  {
        swap(arr[0], arr[i]);
        heapify(arr, i, 0);
    }
} */
// The functions should be written in a way that array become sorted 
// in increasing order when above heapSort() is called.
// To heapify a subtree rooted with node i which is  an index in arr[]. 
// n is size of heap. This function  is used in above heapSor()
void heapify(int arr[], int n, int i)  {
      // Your Code Here
      int largest = i;
      int left = 2*i + 1;
      int right = 2*i + 2;
      
      if(left < n && arr[left]>arr[largest])
      {
          largest = left;
      }
      if(right < n && arr[right]>arr[largest])
      {
          largest = right;
      }
      
      if(largest != i)
      {
          swap(arr[i], arr[largest]);
          
          heapify(arr, n, largest);
          
      }

}
// Rearranges input array so that it becomes a max heap
void buildHeap(int arr[], int n)  { 
    // Your Code Here
    for(int i = n/2-1; i>=0; i--)
    {
        heapify(arr, n, i);
    }
}

你可能感兴趣的:(geeksforgeeks-heap sort)