zoukankan      html  css  js  c++  java
  • 选择排序法

    两种基本的数据结构
    1链表
    *链表的数据都是分开的
    *每个元素都存储了下一个元素的地址
    *在中间擦入元素,只需修改他前面的那个元素指向的地址
    *读取慢
    *插入快
    *删除快
    2.数组
    *数组的元素都在一起
    *在中间擦入元素,则必须将后面的元素都往后移
    *读取快
    *插入慢
    *删除慢
    它的工作原理是:
    1. 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。
    2. 以此类推,直到全部待排序的数据元素的个数为零。
    代码:
    <?php
    class test {
        /**
         * Created by PhpStorm.
         * User: huahua
         * Date: 2020/3/6
         * Time: 下午8:25
         */
    
        public function selectionSort($arrs) {
            $newArr = [];
            foreach ($arrs as $index => $value) {
                $key =$this->findSmallest($arrs);
                $newArr[] = $arrs[$key];
                unset($arrs[$key]);
                $arrs=array_values($arrs);  //索引重新规划
            }
            return $newArr;
        }
    
        //找到数组中最小的数字
        public function findSmallest($arrs) {
            $smallest = $arrs[0];
            $smallest_index = 0;
            foreach ($arrs as $index => $arr) {
                if ($arrs[$index] < $smallest) {
                    $smallest = $arrs[$index];
                    $smallest_index = $index;
                }
            }
            return $smallest_index;
        }
    
    /**
     * 1 遍历数组,找到$i下标后数值最小的值与$i的值呼唤
     * 2 多次循环,得到正序数组
     * 3,6,1,0    $minIndex = 0;=>3   $temp=3 $arr[0]=$arr[3]=0 $arr[3]=3 (0,6,1,3)
     * 0,6,1,3    $minIndex = 1;=>2   $temp=6 $arr[1]=$arr[2]=1 $arr[2]=6 (0,1,6,3)
     * 0,1,6,3    $minIndex = 2;=>3   $temp=6 $arr[2]=$arr[3]=3 $arr[3]=6 (0,1,3,6)
     * **/
        function selectionSort2($arr)
        {
            $len = count($arr);
            for ($i = 0; $i < $len - 1; $i++) {
                $minIndex = $i;
                for ($j = $i + 1; $j < $len; $j++) {
                    if ($arr[$j] < $arr[$minIndex]) {
                        $minIndex = $j;
                    }
                }
                $temp = $arr[$i];
                $arr[$i] = $arr[$minIndex];
                $arr[$minIndex] = $temp;
            }
            return $arr;
        }
    }
    $test =new test();
    var_dump($test->selectionSort([3,6,1,0,9,234,4325432,43,4324,8900,798479,4318982379,44,999,5,5,543343]));
  • 相关阅读:
    Cassandra内部架构
    Cassandra数据模型
    windows10 docker安装使用
    vue用async、await实现同步请求
    navicat mysql 书写存储过程并导出成sql
    idea svn 文件还原到指定版本
    vscode vue 去掉语法提示
    elasticsearch regexp查询特殊字符处理
    redis中获取不同自增数的方法
    java Elasticsearch 进行嵌套子聚合
  • 原文地址:https://www.cnblogs.com/8013-cmf/p/12431036.html
Copyright © 2011-2022 走看看