堆排序

void Max_Heapify(int *a, int heap_size, int i)
{
   int left = (i<<1) + 1;
   int right = (i<<1) + 2;

   int largest = i;
   while(left<heap_size || right<heap_size)
   {
       if(left<heap_size && a[largest]<a[left])
       {
           largest = left;
       }
       if(right<heap_size && a[largest]<a[right])
       {
           largest = right;
       }

       if(i != largest)
       {
           int temp = a[largest];
           a[largest] = a[i];
           a[i] = temp;

           i = largest;
           left = (i<<1) + 1;
           right = (i<<1) + 2;
       }
       else
       {
           break;
       }
   }
}

void Build_Max_Heap(int *a, int heap_size)
{
    for(int i = heap_size / 2 - 1; i >= 0; i--)
    {
        Max_Heapify(a, heap_size, i);
    }
}

void HeapSort(int *a, int len)  //堆排序接口
{
    int heap_size = len;
    Build_Max_Heap(a,heap_size);

    for(int i = len - 1; i>=1; i--)
    {
        int temp = a[0];
        a[0] = a[i];
        a[i] = temp;

        heap_size--;
        Max_Heapify(a, heap_size, 0);
    }
}

posted @ 2013-07-14 21:35  xly0713  阅读(106)  评论(0编辑  收藏  举报