第三種堆排序 原地堆排序 Java版

2021-08-17 04:48:07 字數 762 閱讀 9254

/**

*實現堆排序[原地堆排序]

*堆適用於動態資料的維護,不適合系統級的排序

*時間複雜度o(nlogn),從小到大排序,前兩種堆排序均開闢了額外空間

*不需開闢額外空間,也不需為額外空間進行處理,所以,空間複雜度為o(1)

*根節點從0開始,左孩子:2i+1,右孩子2i+2;

*/

public

class heapsort3

//從小到大排序,

for(int i=n-1;i>0;i--)

}private

void __shiftdown(int arr, int n, int i)

if(arr[i]>=arr[j])

break;

swap(arr,i,j);

i=j;}}

private

void

swap(int arr, int i, int j)

}public

static

void

main(string args) ;

int n=arr.length;

heapsort3 sort3=new heapsort3();

sort3.heapsort3(arr, n);

for(int i=0;iout.print(arr[i]+" ");

}}

原地堆排序

siwuxie095 原地堆排序 程式 1 原地堆排序的實現 sorttesthelper.h ifndef sorttesthelper h define sorttesthelper h include include include include include using namespac...

原地堆排序

上一節講的兩種堆排序都需要開闢o n 的輔助空間 建構函式中使用new分配的輔助空間 程式在開闢輔助空間和釋放空間的時候也會消耗一定的時間,若能多陣列進行原地堆排序,則省去了開闢和釋放空間的時間,時間效能會好一些。給定乙個大小為n的陣列,將這個陣列heapify,變為最大堆,此時陣列的第乙個元素就是...

原地堆排序

堆排序 我之前使用的堆排序是要開 乙個長度為 n的陣列,事實上,我們可以把原陣列看成乙個堆,也就是說我們不用開乙個陣列,而是在原地排序 怎麼說呢 還是給我乙個陣列,我對這個陣列進行heapify 操作,這樣就得到了乙個大根堆 腦袋是最大的 然後我們把最大的那個數和陣列的最後乙個元素交換,這樣一來,陣...