快速排序和插入排序

下面介绍用快速排序法和插入排序法来给一个一维数组排序

一、快速排序法:定一个标尺,把元素小于这个标尺的放在一个数组中,大于这个标尺的元素放在另一个数组中,得到两个数组分别进行上一步同样的操作,最后合并数组

具体代码实现如下:

// 快速排序法:
function quick_sort($arr) {
	// 判断传过来的是否是一个数组
    if(!is_array($arr)) {
        return false;
    }

    // 获取数组的长度
    $len = count($arr);
    // 如果数组的<=1,说明不许排序
    if($len <= 1) {
        return $arr;
    }

    // 选择第一个元素作为标尺
    $base = $arr[0];

    // 初始化两个数组
    $left_arr = array();	// 用于放小于标尺的元素
    $right_arr = array();	// 用于放大于标尺的元素

    // 循环数组对元素进行分组
    for($i=1;$i<$len;$i++) {
    	if($base>$arr[$i]) {
    		$left_arr[] = $arr[$i];
    	} else {
    		$right_arr[] = $arr[$i];
    	}
    }

    // 再分别对这两个数组进行同样的排序处理
   	// 递归调用这个函数,并记录结果
   	$left_arr = quick_sort($left_arr);
   	$right_arr = quick_sort($right_arr);

   	// 合并数组
   	return array_merge($left_arr,array($base),$right_arr);
}

// 测试:
$arr = array(7,2,4,3,8,6);
var_dump(quick_sort($arr));


插入排序法:将要排序的元素插入到已经排序好的数组的指定位置

具体代码实现如下:

// 插入排序
function insert_into($arr) {
	// 首先区分,哪部分是已经排序好的,那部分是没有排序好的元素
	// 找到其中一二需要排序的元素,这个元素,就是从第二个元素开始,到最后一个元素都是需要排序的元素
	$len = count($arr);
	for($i=1;$i<$len;$i++) {
		// 获取当前需要比较的元素值
		$tmp = $arr[$i];

		// 内层循环控制比较,并插入
		for($j=$i-1;$j>=0;$j--) {
			// $arr[$i]是需要插入的元素,$arr[$j]是需要比较的元素
			if($tmp<$arr[$j]) {
				// 发现插入的元素要小,交换位置
				// 将后面的元素与前面的元素交换
				$arr[$j+1] = $arr[$j];
				$arr[$j] = $tmp;
			} else {
				// 如果碰不到需要移动的元素
				// 由于已经排序好的元素,前面的就不需要再次比较了
				break;
			}
		}
	}

	return $arr;
}
// 测试:
$arr = array(7,2,4,3,8,6);
var_dump(insert_into($arr));


你可能感兴趣的:(php算法)