• 【技术宅2】插入选择冒泡快速交换排序算法


    //插入排序(一维数组)

    //插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

    function insert_sort($arr){

           $count=count($arr);

           for($i=1;$i<$count;$i++){

                  $tem=$arr[$i];// 获得当前值

                  $j=$i-1;// 获得当前值的前一个位置

                  while($arr[$j]>$tem){// 如果当前值小于前一个值切未到数组开始位置

                         $arr[$j+1]=$arr[$j];// 把前一个的值往后放一位

                         $arr[$j]=$tem;

                         $j--;// 位置递减

                  }

           }

           return $arr;

    }

    $array=array(1,3,6,2,4,8,5340,33,45,78,1000);

    print_r(insert_sort($array));//Array ( 1 ,2 ,3 ,4 ,6 ,8 ,33,45,78,1000,5340)

     

    //选择排序

    //选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。

    function select_sort($arr){

        $count = count($arr);// 获得数组总长度

        for($i=0; $i<$count; $i++){// 遍历数组

            $k = $i;// 暂存当前位置

            for($j=$i+1; $j<$count; $j++){// 遍历当前位置以后的数据

                if ($arr[$k] > $arr[$j])// 如果有小于当前值的

                    $k = $j;// 暂存位置

                if ($k != $i){

                    $tmp = $arr[$i];// 暂存最小值

                    $arr[$i] = $arr[$k];// 把当前值放到算好的位置

                    $arr[$k] = $tmp;// 把当前值换成算好的值

                 }

             }

         }

        return $arr;

    }

    $array=array(1,3,6,2,4,8,5340,33,45,78,1000);

    print_r(select_sort($array));//Array ( 1 ,2 ,3 ,4 ,6 ,8 ,33,45,78,1000,5340)

     

    //冒泡排序

    //冒泡排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。

    function bubble_sort($arr){

           $count=count($arr);                   // 获得数组总长度

           if($count<=0) return false;

           for($i=0; $i<$count; $i++){           // 正向遍历数组

                  for($j=$count-1; $j>$i; $j--){    // 正向遍历数组

                         if ($arr[$j] < $arr[$j-1]){   // 相邻两个数比较

                                $tmp = $arr[$j];          // 暂存较小的数

                                $arr[$j] = $arr[$j-1];    // 把较大的放前面

                                $arr[$j-1] = $tmp;        // 较小的放后面

                         }

                  }

           }

           return $arr;

    } 

    $array=array(1,3,6,2,4,8,5340,33,45,78,1000);

    print_r(bubble_sort($array));//Array ( 1 ,2 ,3 ,4 ,6 ,8 ,33,45,78,1000,5340)

     

    //快速排序

    //快速排序实质上和冒泡排序一样,都是属于交换排序的一种应用。所以基本思想和上面的冒泡排序是一样的。

    function quick_sort($array){

           if (count($array) <= 1) return $array;

           $key = $array[0];

           $left_arr = array();

           $right_arr = array();

           for ($i=1; $i<count($array); $i++){// 从索引的第二个开始遍历数组

           if ($array[$i] <= $key)// 如果值小于索引1

                  $left_arr[] = $array[$i];// 装入左索引数组(小于索引1的数据)

           else

                  $right_arr[] = $array[$i];// 否则装入右索引中(大于索引1的数据)

           }

           $left_arr = quick_sort($left_arr);

           $right_arr = quick_sort($right_arr);

           return array_merge($left_arr, array($key), $right_arr);

    }

    $array=array(1,3,6,2,4,8,5340,33,45,78,1000);

    print_r(quick_sort($array));//Array ( 1 ,2 ,3 ,4 ,6 ,8 ,33,45,78,1000,5340)

     

    // 交换法排序

    function ExchangeSort($arr){

       $num = count($arr);

       for($i=0;$i<$num-1;$i++){

          for($j=$i+1;$j<$num;$j++){

              if($arr[$j]<$arr[$i]){

                       $iTemp = $arr[$i];

                         $arr[$i] = $arr[$j];

                         $arr[$j] = $iTemp;

              }

          }

       }

       return $arr;

    }

    $array=array(1,3,6,2,4,8,5340,33,45,78);

    print_r(ExchangeSort($array));//Array ( 1 ,2 ,3 ,4 ,6 ,8 ,33,45,78,1000,5340

     

     

    我发现了一个奇怪的现象,就是经常赞我的人,特别是支持我的人,都在不久后做成了如下事情:1、恋爱成功了;2、生意谈成了;3、事业有成了;4、升官发财了;5、心情舒畅了;6、家庭和睦了;7、身体健康了;8、万事如意了
  • 相关阅读:
    像画笔一样慢慢画出Path的三种方法(补充第四种)
    占位符行为 PlaceHolderBehavior 的实现以及使用
    WPF实现物理效果 拉一个小球
    WPF实现Twitter按钮效果
    WPF自适应可关闭的TabControl 类似浏览器的标签页
    WPF仿百度Echarts人口迁移图
    WPF绘制简单常用的Path
    51Nod 1534 棋子游戏
    数论基础
    Buy a Ticket
  • 原文地址:https://www.cnblogs.com/zhuyibo/p/3984878.html
Copyright © 2020-2023  润新知