Maison développement back-end tutoriel php php排序算法?php排序经典算法_PHP教程

php排序算法?php排序经典算法_PHP教程

Jul 13, 2016 am 10:47 AM
php Non plusieurs droite 总结 排序 article 算法 经典

本文章来给大家总结几个不错的php排序算法,希望这些算法对各位同学会有所帮助哦。

 代码如下 复制代码


1.冒泡算法,排序算法,由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序

$array = array(a,f,c,b,e,h,j,i,g); 

   function maopao_fun($array){ 

       if($len

           return $arr; 

       } 

       $count = count($array); 

       for($i=0;$i

           for($j=$count-1;$j>$i;$j--){ 

               if($array[$j] > $array[$j-1]){ 

                   $tmp = $array[$j]; 

                   $array[$j] = $array[$j-1]; 

                   $array[$j-1] = $tmp; 

               } 

           } 

       } 

       return $array; 

   } 

2.快速排序,
快速排序(Quicksort)是对冒泡排序的一种改进。
由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。

function quickSort($arr){ 

       $len = count($arr); 

       if($len

           return $arr; 

       } 

       $key = $arr[0]; 

       $left_arr    = array(); 

       $right_arr    = array(); 

       for($i=1; $i

           if($arr[$i]

               $left_arr[] = $arr[$i]; 

           } else { 

               $right_arr[] = $arr[$i]; 

           } 

       } 

       $left_arr    = quickSort($left_arr); 

       $right_arr    = quickSort($right_arr); 

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

   } 

3.选择排序
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,
顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法

 代码如下 复制代码

function select_sort($arr){ 

    $count = count($arr); 

    for($i=0; $i

        for($j=$i+1; $j

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

                $tmp = $arr[$i]; 

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

                $arr[$j] = $tmp; 

            } 

        } 

    } 

    return $arr; 

4.插入排序
  从第一个元素开始,该元素可以认为已经被排序
  取出下一个元素,在已经排序的元素序列中从后向前扫描
  如果该元素(已排序)大于新元素,将该元素移到下一位置
  重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  将新元素插入到下一位置中
  重复步骤2

 代码如下 复制代码

function insert_sort($arr){ 

        $count = count($arr); 

        for($i=1; $i

            $tmp = $arr[$i]; 

            $j = $i - 1; 

            while($arr[$j] > $tmp){ 

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

                $arr[$j] = $tmp; 

                $j--; 

            } 

        } 

        return $arr; 

    } 

  

    $arr = array(49,38,65,97,76,13,27); 

    print_r(insert_sort($arr));


 

四种排序算法的PHP实现

1) 插入排序(Insertion Sort)的基本思想是:
每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
2) 选择排序(Selection Sort)的基本思想是:
每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。
3) 冒泡排序的基本思想是:
两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
4) 快速排序实质上和冒泡排序一样,都是属于交换排序的一种应用。所以基本思想和上面的冒泡排序是一样的。

 代码如下 复制代码

 /**
 * 四种排序算法设计(PHP)
 *
 * 1) 插入排序(Insertion Sort)的基本思想是:
   每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
   2) 选择排序(Selection Sort)的基本思想是:
      每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。
   3) 冒泡排序的基本思想是:
      两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
   4) 快速排序实质上和冒泡排序一样,都是属于交换排序的一种应用。所以基本思想和上面的冒泡排序是一样的。
 *
 * @author quanshuidingdang
 */
class Sort {
 private $arr  = array(); 
 private $sort = 'insert';
 private $marker = '_sort';
 
 private $debug = TRUE;
 
 /**
  * 构造函数
  *
  * @param array 例如: $config = array (
         'arr' => array(22,3,41,18) ,  //需要排序的数组值
         'sort' => 'insert',      //可能值: insert, select, bubble, quick
         'debug' => TRUE        //可能值: TRUE, FALSE
         )
  */
 public function __construct($config = array()) {
  if ( count($config) > 0) {
   $this->_init($config);
  }
 }
 
 /**
  * 获取排序结果
  */
 public function display() {
  return $this->arr;
 }
 
 /**
  * 初始化
  *
  * @param array
  * @return  bool
  */
 private function _init($config = array()) {
  //参数判断
  if ( !is_array($config) OR count($config) == 0) {
   if ($this->debug === TRUE) {
    $this->_log("sort_init_param_invaild");
   }
   return FALSE;
  }
  
  //初始化成员变量
  foreach ($config as $key => $val) {
   if ( isset($this->$key)) {
    $this->$key = $val;
   }
  }
  
  //调用相应的成员方法完成排序
  $method = $this->sort . $this->marker;
  if ( ! method_exists($this, $method)) {
   if ($this->debug === TRUE) {
    $this->_log("sort_method_invaild");
   }
   return FALSE;
  }
  
  if ( FALSE === ($this->arr = $this->$method($this->arr)))
   return FALSE;
  return TRUE;
 }
 
 /**
  * 插入排序
  *
  * @param array
  * @return bool
  */
 private function insert_sort($arr) {
  //参数判断
  if ( ! is_array($arr) OR count($arr) == 0) {
   if ($this->debug === TRUE) {
    $this->_log("sort_array(insert)_invaild");
   }
   return FALSE;
  }
  
  //具体实现
  $count = count($arr);
  for ($i = 1; $i    $tmp = $arr[$i];
   for($j = $i-1; $j >= 0; $j--) { 
    if($arr[$j] > $tmp) {
     $arr[$j+1] = $arr[$j];
     $arr[$j] = $tmp;
    }
   }
  }
  return $arr;
 }
 
 /**
  * 选择排序
  *
  * @param array
  * @return bool
  */
 private function select_sort($arr) {
  //参数判断
  if ( ! is_array($arr) OR count($arr) == 0) {
   if ($this->debug === TRUE) {
    $this->_log("sort_array(select)_invaild");
   }
   return FALSE;
  }
  
  //具体实现
  $count = count($arr);
  for ($i = 0; $i    $min = $i;
   for ($j = $i+1; $j     if ($arr[$min] > $arr[$j])  $min = $j;
   }
   if ($min != $i) {
    $tmp = $arr[$min];
    $arr[$min] = $arr[$i];
    $arr[$i] = $tmp;
   }
  }
  return $arr;
 }
 
 /**
  * 冒泡排序
  *
  * @param array
  * @return bool
  */
 private function bubble_sort($arr) {
  //参数判断
  if ( ! is_array($arr) OR count($arr) == 0) {
   if ($this->debug === TRUE) {
    $this->_log("sort_array(bubble)_invaild");
   }
   return FALSE;
  }
  
  //具体实现
  $count = count($arr);
  for ($i = 0; $i    for ($j = $count-1; $j > $i; $j--) {
    if ($arr[$j]      $tmp = $arr[$j];
     $arr[$j] = $arr[$j-1];
     $arr[$j-1] = $tmp;
    }
   }
  }
  return $arr; 
 }
 
 /**
  * 快速排序
  *
  * @param array
  * @return bool
  */
 private function quick_sort($arr) {
  //具体实现
  if (count($arr)   $key = $arr[0];
  $left_arr = array();
  $right_arr = array();
  for ($i = 1; $i    if ($arr[$i]     $left_arr[] = $arr[$i];
   else
    $right_arr[] = $arr[$i];
  }
  $left_arr = $this->quick_sort($left_arr);
  $right_arr = $this->quick_sort($right_arr);

  return array_merge($left_arr, array($key), $right_arr);
 }
 
 /**
  * 日志记录
  */
 private function _log($msg) {
  $msg = 'date[' . date('Y-m-d H:i:s') . '] ' . $msg . 'n';
  return @file_put_contents('sort_err.log', $msg, FILE_APPEND);
 }
}

/*End of file sort.php*/
/*Location htdocs/sort.php */

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632898.htmlTechArticle本文章来给大家总结几个不错的php排序算法,希望这些算法对各位同学会有所帮助哦。 代码如下 复制代码 1.冒泡算法,排序算法,由于在排...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

See all articles