排序算法(冒泡,选择,插入,快速)查找算法(二分,快速)

author author     2022-09-15     377

关键词:

                        四种排序算法

1.冒泡排序

  思路分析:从前往后相邻的两个数一次进行比较,大的往下沉,小的网上 冒。当相邻的两个数的比较后发现他们的排序与排序要求相反,就互换。

  代码实现

  $arr = array (1,42,33,69,7,82,34,54,70,99);

  $len = count($arr);

  For($i=1;$i<$len;$i++){

    For($j=0;$j<$len-$i;$j++){

      If($arr[$j] > $arr[$j+1]){

        $tmp = $arr[$j+1];

        $arr[$j+1]=$arr[$j];

        $arr[$j]=$tmp;

      }

    }

  } 外层循环此处,内层循环轮数(冒出一个,比较一次)

 

2.选择排序

  思路分析:选出最小的一个数与第一位的数交换。然后在剩下的数当中再找最小的与第二位置的数交换,如此循环到最后为止。

  代码实现:

  $arr = array (1,42,33,69,7,82,34,54,70,99);

  $len = count($arr);

  For($i=0;$i<$len-1;$i++){

  $p=$i;  假设最小的值

    For($j=$i+1;$j<$len;$j++){

      If($arr[$p]>$arr[$j]){

        $p = $j; 发现更小的,记录下最小值的位置,下次用小的比

      }

    }

  已经确定了当前最小值的位置,保存到$p中,如果发现最小值的位置与当前假设的位置$i不同,则互换。

  If($p != $i){

    $tmp = $arr[$p];

    $arr[$p] = $arr[$i];

    $arr[$i] = $tmp;

  }

  }

3.插入排序

  思路分析:把N个数插入到已排列好的顺序的数组中,使这N个数也是排序好的。

  代码实现:

  $arr = array (1,42,33,69,7,82,34,54,70,99);

  $len = count($arr);

  For($i=1;$i<$len;$i++){

    $tmp=$arr[$i];

    For($j=$i-1;$j>=0;$j--){

      If($tmp < $arr[$j]){ 发现插入的元素要小,交换位置.

        $arr[$j+1] = $arr[$j];

        $arr[$j] = $tmp;

      }else{

        Break;

      }

    }

  }

4.快速排序

  思路分析:选择一个基准元素,通常选择第一个元素或者最后一个元素。 通过一趟扫描,排序列分成两部分,一部分比基准元素小,一部分大于 等于基准元素此时基准        元素在其排好序后的正确位置,然后再用同样的 方法递归地排序划分的两部分

  代码实现:

  $arr = array (1,42,33,69,7,82,34,54,70,99);

  Function digui($arr){

    $len = count($arr);

    If($len <= 1){

      Return $arr;  是否要继续执行

    }

  $base_num = $arr[0];

  $left_array = array();

  $right_array = array();

  For($i=1;$i<$len;$i++){

    If($base_num > $arr[$i]){

      $left_array[] = $arr[$i];

    }else{

      $right_array[] = $arr[$i];

    }

  }

  $left_array = digui($left_array);

  $right_array = digui($right_array);

  Return array_merge($left_array,array($base_num),$right_array);

  }  

                            两种查找算法

1.二分查找

  思路分析:

    1.先取数组中间的值floor(low+top/2)

    2.然后通过与所需查找的数字进行比较,若比中间值大,则将首位 替换 中间位置的下一位,继续第一步的操作。若比中间值小, 则将尾值 替换 为中间值的上  一个位置,继续第一步操作。

    3.重复第二步操作直到找出目标数字。

  比如从1,3,9,23,54中查找23。

  首位置为0。尾位置为4,中间位置为2值为9,比23小。则首位置 新为2+1既为3。那么接下来中间位置就为(3+4)/2=3, 值为 23,比 较相等既找到。

  代码实现:

  非递归:

  $target是要查找的目标 $arr是已经排序好的数组

  function binary(&$arr,$low,$top,$target){

    while($low <= $top){//由于php取商是有小数的,所以向下取整,不过也可不加,数组也会取整

      $mid = floor(($low+$top)/2);

       if($arr[$mid]==$target){

                         return $mid;

                       }elseif($arr[$mid]<$target){

                         $low = $mid+1;                

                    }else{

                         $top = $mid-1;

                  }

              }

              return -1;

  }$arr = array(1,3,9,23,54);echo binary($arr, 0, sizeof($arr), 9)

  

  递归:

  function binaryRecursive(&$arr,$low,$top,$target){

     if($low<=$top){

      $mid = floor(($low+$top)/2);

        if($arr[$mid]==$target){

          return $mid;

        }elseif($arr[$mid]<$target){

          return binaryRecursive($arr,$mid+1,$top,$target);

        }else{

          return binaryRecursive($arr,$low,$mid-1,$target);

        }

    }else{

      return -1;

    }

  }

  $arr = array(1,3,9,23,54);

  echo binaryRecursive($arr, 0, sizeof($arr), 9);

 

1.快速查找

  思路分析:太简单 直接上代码。

  代码实现:

  $arr = array(40,99,700,0,-5);

  Function search($arr,$findVal){

    $flag = false;

    For($i=0;$i<count($arr);$i++){

      If($findVal==$arr[$i]){

        Echo “找到了,下标=$i”;

        $flag = true;

      }

    }

    If(!$flag){

      Echo “查无此人”;

    }

  }

 

java八股文面试题基础篇--二分查找算法冒泡排序选择排序插入排序希尔排序快速排序(代码片段)

1.二分查找算法要求能够用自己语言描述二分查找算法能够手写二分查找代码能够解答一些变化后的考法1.1二分查找算法介绍二分查找也是一种在数组中查找数据的算法。它只能查找已经排好序的数据。二分查找通过比较数组中... 查看详情

算法:二分查找冒泡插入选择排序(代码片段)

...lse:returnmidprint(bin_serach(li,3))#时间复杂度:0(logn)ViewCode2冒泡排序:  查看详情

几种常见的排序算法分析学习

 目录(?)[-]冒泡排序选择排序1直接插入排序1二分查找插入排序希尔入排序快速排序归并排序总结 本篇博客知识点 分别描述了冒泡,选择,直接插入,二分插入,希尔,快速以及归并排序。同时还有Java实现代码,算法... 查看详情

各种排序方法(冒泡,快速,插入,选择),二分查找

<script>varlist=[25,15,60,24,30,70,10,9,8];//冒泡排序functionbubble(list){varlen=list.length,nfor(vari=0;i<len;i++){//i为0:可以确定最小值,i为1:确定第二小的值...for(varj=i+1;j<len;j++){if(list[i]>list[j]){n 查看详情

图形化排序算法比较:快速排序插入排序选择排序冒泡排序

 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序  查看详情

排序算法之选择插入冒泡快速

三个类:     AbstractSortService:packagecn.zhi.sort;publicabstractclassAbstractSortService{publicvoidswap(int[]array,inti,intj){if(i!=j){inttemp=array[i];array[i]=array[j];array[j]=temp;}}publicvoidp 查看详情

java中的几种排序算法:冒泡排序,插入排序,二分法排序,简单排序,快速排序

冒泡排序:int[]hehe={4,7,2,5,6,9,0};for(inti=0;i<hehe.length;i++){for(intj=i+1;j<hehe.length;j++){if(hehe[i]>hehe[j]){inttemp=hehe[i];hehe[i]=hehe[j];hehe[j]=temp;}}}插入排序int[]a={13,7,8,9,10,1,2,32 查看详情

排序算法(冒泡排序,选择排序,插入排序,快速排序)

数组的排序算法选择排序每次选择所要排序得数组中的最大值(由大到小排序,由小到大排序则选择最小值)的数组元素,将这个数组元组的值与最前面没有排序的数组元素进行交换,第一次排序之后,最大的数字来到了第一位,再从第... 查看详情

简单排序算法

这里写目录标题冒泡排序选择排序插入排序希尔排序快速排序二分法查找冒泡排序两个for循环,两两进行比较,如果满足规则,则将两个数据进行交换publicint[]maopao()int[]arrays=1,3,9,5,11,66,85,97,101,588,469,258,147,369,456;for(... 查看详情

冒泡选择插入快速,四种最基础排序算法实现

<?php/***CreatedbyPhpStorm.*User:chm*Date:2016/4/1*Time:19:35*///插入排序特点是一边是排好顺序的,另一边一个一个和顺序的数据对比,每次对比插入一个functioncharu($arr){$len=count($arr);//先给出一个原数组echo"原数组为:";for($y=0;$y<$len;$y++){e... 查看详情

java交换排序之(冒泡排序快速排序)

...来无事,先写篇博文来结束今天。我们大家都知道java的排序算法很多,接下来我就先看看java最常用的几种排序算法的思想源码附上。(本文所有排序只针对值排序,关于对象排序问题待续.....)1.插入排序(直接插入排序、二分... 查看详情

排序算法(冒泡排序选择排序插入排序快速排序归并排序)(代码片段)

1、冒泡排序  (英语:BubbleSort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排... 查看详情

常见的排序算法

插入排序直接插入排序,折半插入排序,2-路插入排序,希尔排序快速排序冒泡排序,快速排序(冒泡排序改进),选择排序简单选择排序,树形选择排序,堆排序归并排序基数排序 查看详情

排序算法小结

排序算法小结排序有可以分为以下几类:  (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。  (2)、选择排序:简单选择排序、堆排序。  (3)、交换排序:冒泡排序、快速排序。  (4)、归并排序  (5)、基数... 查看详情

基础排序算法总览(代码片段)

基础排序算法总览????涉及到相关算法:二分查找:时间复杂度为O(logN)的优秀查找算法冒泡排序:O(N^2)插入排序:O(N^2)选择排序:O(N^2)归并排序:O(NlogN)快速排序:O(NlogN)冒泡排序????比较相邻的两元素,不满足大小关系则互换,... 查看详情

数据结构与算法4:排序算法,选择/插入/冒泡/希尔/快速/归并

【本文谢绝转载,原文来自http://990487026.blog.51cto.com】650)this.width=650;"src="http://s2.51cto.com/wyfs02/M02/87/4A/wKiom1fas7yQMhCrAAIrgn3eO98044.jpg"title="冒泡.jpg"alt="wKiom1fas7yQMhCrAAIrgn3eO98044.jpg"/>排序算 查看详情

八大内部排序算法之希尔堆排序插入排序算法(代码片段)

前言我们所知的八大内部的排序算法有冒泡排序、选择排序、快速排序、归并排序、链式基数排序、插入排序、希尔排序、堆排序、而这篇文章主要研究这其中的希尔排序和堆排序算法,之前的排序算法都在下面连接中介绍... 查看详情

8大排序算法-我熟知(冒泡直接插入)

分类:1)插入排序(直接插入排序、希尔排序)2)交换排序(冒泡排序、快速排序)3)选择排序(直接选择排序、堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少:堆排序平均速... 查看详情