Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何使用堆排序执行最小堆的就地排序?_Sorting_Data Structures_Heap_Heapsort - Fatal编程技术网

Sorting 如何使用堆排序执行最小堆的就地排序?

Sorting 如何使用堆排序执行最小堆的就地排序?,sorting,data-structures,heap,heapsort,Sorting,Data Structures,Heap,Heapsort,每当我在最小堆上进行堆排序时,就会得到反向排序数组 是否有任何方法可以在不使用额外空间的情况下使用堆排序对最小堆进行排序 使用max heapify按升序排序,使用min heapify按降序排序 这是一个堆排序的psudocode Heapsort(A) { BuildHeap(A) for i <- length(A) downto 2 { exchange A[1] <-> A[i] heapsize <- heapsize -1

每当我在最小堆上进行堆排序时,就会得到反向排序数组

是否有任何方法可以在不使用额外空间的情况下使用堆排序对最小堆进行排序


使用max heapify按升序排序,使用min heapify按降序排序

这是一个堆排序的psudocode

Heapsort(A) {
   BuildHeap(A)
   for i <- length(A) downto 2 {
      exchange A[1] <-> A[i]
      heapsize <- heapsize -1
      Heapify(A, 1)
} 

BuildHeap(A) {
   heapsize <- length(A)
   for i <- floor( length/2 ) downto 1
      Heapify(A, i)
}


Heapify(A, i) {
   le <- left(i)
   ri <- right(i)
   if (le<=heapsize) and (A[le]>A[i])
      largest <- le
   else
      largest <- i 
   if (ri<=heapsize) and (A[ri]>A[largest])
      largest <- ri
   if (largest != i) {
      exchange A[i] <-> A[largest]
      Heapify(A, largest)
   }
}
Heapsort(A){
构建堆(A)
因为我
MaxHeapify( int[ ] arr, int i )
{
    int left = 2 * i + 1;
    int right = 2 * i + 2;
    int largest = i;

    if( left < arr.length && arr[ left ] > arr[ largest ] )
        largest = left;
    if( right < arr.length && arr[ right ] > arr[ largest ] )
        largest = right;
    if( largest != i )
    {
        int temp = arr[ i ];
        arr[ i ] = arr[ largest ];
        arr[ largest ] = temp;
        MaxHeapify( arr, largest );
    }
}