堆排序:通過形成大頂堆來實現排序。
思路:兩層迴圈,內迴圈,將最大元素迴圈調整堆頂,外迴圈,將堆頂元素彈出,插入到新陣列,難點在內迴圈,定位到最後乙個非葉子節點(通過右位移方法),設為標誌位,比較該節點與子節點的大小,小於子節點就更換位置,遞減標誌位,遍歷所有非葉子節點,使最大元素換到堆頂位置
$arr
=array(3
,9,4
,1,7
,10,8
,5,2
,6);
/**
* [loopin description]調整為大頂堆,
* @param [array] $array [description]
* @param [int] $num [description]
* @return [type] [description]
*/
function
loopin
(&$array
,$num
)
if(
isset
($array[2
*$num+2
])&&
$array
[$max
]<
$array[2
*$num+2
])
if(
$max
!=$num
)
$num
--;
if(
$num
>=
0)
}
/**
* [loopout description]迴圈彈出堆頂元素,插入新陣列,對剩餘陣列重新整理成大頂堆
* @param [array] $array [description]
* @return [array] [description]
*/
function
loopout
(&$array
)
return
$res
;
}
print_r
(loopout
($arr
));
Python 資料結構與演算法 快排
1.先從待排序的陣列中找出乙個數作為基準數 取第乙個數即可 然後將原來的陣列劃分成兩部分 小於基準數的左子陣列和大於等於基準數的右子陣列。然後對這兩個子陣列再遞迴重複上述過程,直到兩個子陣列的所有數都分別有序。最後返回 左子陣列 基準數 右子陣列 即是最終排序好的陣列。def quicksort n...
資料結構與演算法 排序演算法 (堆排 快排 歸併)
快排的時間複雜度是o nlogn 其實現思想就是隨機找到乙個中間值 小於這個值得放左邊 大於這個值得放右邊 然後大於這個值得半部分和小於這個值得半部分分別遞迴 直到全部排完 jdk1.8中的arrays.sort 的排序方法就是使用的快排 當資料量大於47的時候採用快排 小於47的時候使用插排 實現...
資料結構7 排序
理解選擇排序的不穩定性 選擇排序 氣泡排序 插入排序 public int charusort int intarr for int i 1 i intarr.length i return intarr 正確性檢測 test public void sorttest system.out.prin...