• PHP实现四种排序-选择排序


    代码实现:

    /**
    *    选择排序
    *    在一列数字中,选出最小数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
    */
    function selectSort($arr){
    	//定义中间变量
    	$temp = 0;
    	$mnt  = count($arr);
    	for ($i=0; $i < $mnt-1; $i++) { 
    		//定义最小位置
    		$minIndex = $i;
    		for ($j=$i+1; $j < $mnt; $j++) { 
    			if($arr[$j] < $arr[$minIndex]){
    				$minIndex = $j;
    			}
    
    		}
    		if($i!=$minIndex){
    			$temp 			= $arr[$i];
    			$arr[$i] 		= $arr[$minIndex];
    			$arr[$minIndex] = $temp;
    		}
    	}
    	return $arr;
    }
    //测试
    $arr = [5,2,1,1,3,1,4];
    // $end = numSort($arr);
    $end = selectSort($arr);
    echo "<pre>";
    print_r($end);
    

    过程分析:

    代码中的数组包含7个元素,所以需要6轮排序;备注:设定minIndex为最小元素的位置。
    一、
    1、[5, 2,1,1,3,1,4] 与j=1 位置的元素比较,得出最小值是2 minIndex=1
    2、[5,2, 1,1,3,1,4] 与j=2 位置的元素比较,得出最小值是1 minIndex=2
    3、[5,2,1, 1,3,1,4] 与j=3 位置的元素比较,最小值仍是1 minIndex=2
    4、[5,2,1,1, 3,1,4] 与j=4 位置的元素比较,最小值仍是1 minIndex=2
    5、[5,2,1,1,3, 1,4] 与j=5 位置的元素比较,最小值仍是1 minIndex=2
    6、[5,2,1,1,3,1, 4] 与j=6 位置的元素比较,最小值仍是1 minIndex=2
    得出:i=0,minIndex=2 交换位置[1,2, 5, 1,3,1,4]

    二、
    1、[1,2, 5,1,3,1,4] 与j=2 位置的元素比较,得出最小值是2 minIndex=1
    2、[1,2,5, 1,3,1,4] 与j=3 位置的元素比较,得出最小值是1 minIndex=3
    3、[1,2,5,1, 3,1,4] 与j=4 位置的元素比较,得出最小值仍是1 minIndex=3
    4、[1,2,5,1,3, 1,4] 与j=5 位置的元素比较,得出最小值仍是1 minIndex=3
    5、[1,2,5,1,3,1, 4] 与j=6 位置的元素比较,得出最小值仍是1 minIndex=3
    得出:i=1,minIndex=3 交换位置[1, 1,5,2,3,1,4]
    三、
    1、[1,1,5, 2,3,1,4] 与j=3 位置的元素比较,得出最小值是2 minIndex=3
    2、[1,1,5,2, 3,1,4] 与j=4 位置的元素比较,得出最小值仍是2 minIndex=3
    3、[1,1,5,2,3, 1,4] 与j=5 位置的元素比较,得出最小值是1 minIndex=5
    4、[1,1,5,2,3,1, 4] 与j=6 位置的元素比较,得出最小值仍是1 minIndex=5
    得出:i=2,minIndex=5 交换位置[ 1, 1,1,2,3,5, 4]

    四、
    1、[1,1,1,2, 3,5,4] 与j=4 位置的元素比较,得出最小值是2 minIndex=3
    2、[1,1,1,2,3, 5,4] 与j=5 位置的元素比较,得出最小值仍是2 minIndex=3
    3、[1,1,1,2,3,5, 4] 与j=6 位置的元素比较,得出最小值仍是2 minIndex=3
    得出:i=3,minIndex=3 相等,无需交换位置[1,1, 1,2,3,5,4]

    五、
    1、[1,1,1,2,3, 5,4] 与j=5 位置的元素比较,得出最小值仍是3 minIndex=4
    2、[1,1,1,2,3,5, 4] 与j=6 位置的元素比较,得出最小值仍是3 minIndex=4
    得出:i=4,minIndex=4 相等,无需交换位置[ 1, 1,1,2,3,5, 4]

    六、
    1、[1,1,1,2,3,5, 4] 与j=6 位置的元素比较,得出最小值仍是4 minIndex=6
    得出:i=5,minIndex=6 交换位置[1,1,1,2,3,4,5]

    结论:

    每一轮比较都可以确定一个位置,对于N个数,比较N-1轮可以确定N个位置上的数,因为确定了N-1个位置,最后一个位置也就确定了

  • 相关阅读:
    Python自学教程1安装pycharm和执行环境
    软件测试100天上岸3测试有哪些最高原则
    Python自学教程2:大牛们怎么写注释
    软件测试100天上岸2测试必须有策略
    学自动化测试可以用这几个练手项目
    嵌入式系统测试思路
    软件测试100天上岸1测试就是找茬游戏
    Postman如何做接口测试,那些不得不知道的技巧
    【Vue】vue3 部分组件手动刷新也无法热更新
    【JavaScript】手写深拷贝 2.0(更新 20220715)
  • 原文地址:https://www.cnblogs.com/meetuj/p/10408420.html
Copyright © 2020-2023  润新知