插入排序
插入排序
/******************************************************* * *插入排序 * * *******************************************************/ #include<stdio.h> #define LEN 5 int a[LEN] = {10, 5, 2, 4, 7}; void InsertionSort(void) { int i, j, key; for (j = 1; j < LEN; j++) { key = a[j]; i = j - 1; while (i >= 0 && a[i] > key) { a[i+1] = a[i]; i--; } a[i+1] = key; } } int main(void) { InsertionSort(); return 0; }
php插入排序:
<?php function InsertionSort($arr) { $len = count($arr); for ($j = 1; $j < $len; $j++) { $temp = $arr[$j]; $i = $j - 1; while ($i >= 0 && $arr[$i] > $temp) { $arr[$i+1] = $arr[$i]; $i--; } $arr[$i+1] = $temp; } print_r($arr); return $arr; } $arr = array(10,5,2,4,7); InsertionSort($arr); ?>
算法描述:
1.从第一个元素开始,该元素可以认为已经被排序;(j=0的那个元素)
2.取出下一个元素,在已经排序的元素序列中从后向前扫描;
10, 5, 2, 4, 7
5, 10, 2, 4, 7
2, 5, 10, 4, 7
2, 4, 5, 10, 7
2, 4, 5, 7, 10
3.如果元素(已排序)大于新元素,将该元素移到下一位置;(10,5 => 5,10)
4.重复步骤3,直到已经找到已排序元素小于或等于新元素的位置;
5.将新元素插入到该位置中;
6.重复步骤2。