有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
原理图
实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| function insertion_sort(&$array) { $array_length = count($array); for ($i = 1; $i < $array_length; $i++) { $inserted_value = $array[$i]; $inserted_index = $i - 1; while (($inserted_index >= 0) && ($inserted_value < $array[$inserted_index])) { $array[$inserted_index + 1] = $array[$inserted_index]; $inserted_index--; } if (($inserted_index + 1) != $i) { $array[$inserted_index + 1] = $inserted_value; } } } function print_array($array) { foreach ($array as $key => $value) { echo "\$array[$key] = $value <br />"; } } $array = array(1, -1, 3, 3, 2, 9, -10, 7, 6, 5);
insertion_sort($array); print_array($array);
|