堆的应用之堆排序

来源:互联网 发布:设计淘宝店招 编辑:程序博客网 时间:2024/06/07 03:18
void AdjustDown1(int* b, int n, int i)     //向下调整,建立大堆  {      int parent = i;      int child = parent * 2 + 1;      while (child < n)      {          if (child + 1 < n&&b[child + 1] > b[child])          {              ++child;          }          if (b[child]>b[parent])          {              swap(b[child], b[parent]);              parent = child;              child = parent * 2 + 1;          }          else          {              break;          }      }  }  int b[] = { 10, 11, 1, 2, 3, 85, 96, 4, 23, 52 };  void SortHeap(int* b, size_t n)//堆排序  升序   --》建立大堆  {      for (int i = (n - 2) >> 2; i >= 0; --i)//建堆      {      AdjustDown1(b, n, i);  }  int end = n - 1;  //end 为最后一个数的下标  while (end)       //不断的取堆顶最大的数放到后面,--end,调整堆。  {      swap(b[0], b[end]);       AdjustDown1(b, end,0);      --end;  }  for (int i = 0; i < n; ++i)  {      cout << b[i] << " ";  }  cout << endl;  
原创粉丝点击