穩定的排序:排序之後,源資料中相同的資料相對位置不會發生改變
不穩定的排序:反之。
<?php
$test = array(12,10,1,5,10);
foreach($test
as$val)
for($i=0;$i
$test);$i++)
}
}
bin($test222, 58, 0, count($test222)-1);
function
bin($data, $num, $left, $right)
$mid = round(($left + $right)/2);
if($data[$mid] == $num)else
if ($data[$mid] > $num)else
if ($data[$mid] < $num)
}
quicksort($test222, 0, count($test222)-1);
function
quicksort
(&$data, $left, $right)
}function
onesort
(&$data, $left, $right)
$data[$left] = $tmp;
return
$left;
}
優化方案:
1。當資料量小的時候,採用插入排序效率更高
2。單次好序的資料,如果有相同資料,相同的資料進行聚合,減少相同資料的排序次數
3。三數取中,開頭,結尾,中間的數,三個數去中間大小的資料作為開始值。
堆排序參考的部落格
<?php
$data = array(2,6,3,66,55,12,336,55,44,78,5,3,0,15,56,4);
//先將陣列各個節點從下至上進行堆排序,
for($i=floor(count($data)/2-1); $i>=0; $i--)
//排好序的資料,堆頂元素與最後一位進行置換,然後對剩餘元素繼續堆排序
for($i=count($data)-1;$i>=0;$i--)
foreach($data
as$val)
function
duisort
(&$data, $index, $size)
if($right
< $size && $data[$head] < $data[$right])
if($head != $index)
}function
swap
(&$data, $head, $index)
<?php
$data=array(2,5,6,3,1,0);
insert($data);
foreach($data
as$val)
function
insert
(&$data)
if($key+1 != $i)
}
}
有步長的插入排序
<?php
$data = array(5,3,4,8,9,0,10,2);
shell($data);
foreach($data
as$val)
function
shell
(&$data)
while($h>=1)
}
$h = floor($h/3);
}
}
<?php
$a = array(12,1,3,5,7,9,4);
$c =array();
dsort($a, 0, count($a)-1, $c);
foreach($a
as$val)
function
dsort
(&$a,$left, $right, $c)
}function
mersort
(&$a, $left, $mid, $right, $c)else
}while($i
<=$mid)
while($j
<=$right)
for($i=0; $i
<$k; $i++)
}
排序演算法複習
參考自 直接插入排序 從小到大排列 n個資料,第乙個資料平凡有序 假設前i 1個資料串有序,根據第i個的大小將第i個插入到此串中,則前i個的資料串也有序。因此可得到n個資料有序。插入方法 待插入元素為第i元素,數值存為temp,將 i 之前的元素 j 從第 i 1 元素開始與之比較 如果比temp大...
演算法複習 排序
排序中主要有插入排序 氣泡排序 歸併排序 快速排序等 主要從空間消耗 時間複雜度 最差時間複雜度等方面考慮演算法的好處 1.插入排序 插入排序是一種簡單直觀的排序演算法。它的工作原理非常類似於我們抓撲克牌 對於未排序資料 右手抓到的牌 在已排序序列 左手已經排好序的手牌 中從後向前掃瞄,找到相應位置...
排序演算法複習
created by nickwang on 2019 8 24.直接插入排序 o n 2 折半插入排序 o n 2 氣泡排序 o n 2 快速排序 o nlogn 選擇排序 o n 2 堆排序 o nlogn 歸併排序 o nlogn ifndef c sort h define c sort h...