zoukankan      html  css  js  c++  java
  • 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个位置,最后一个位置也就确定了

  • 相关阅读:
    第六章 函数、谓词、CASE表达式 6-3 CASE表达式
    第六章 函数、谓词、CASE表达式 6-2 谓词
    第六章 函数、谓词、CASE表达式 6-1 各种各样的函数
    第五章 复杂查询 5-3 关联子查询
    第五章 复杂查询 5-2 子查询
    第五章 复杂查询 5-1 视图
    第四章 数据更新 4-3 事务
    第四章 数据库和SQL 4-3 数据的更新(UPDATE语句的使用方法)
    面向对象进阶
    多态
  • 原文地址:https://www.cnblogs.com/meetuj/p/10408420.html
Copyright © 2011-2022 走看看