Rumah pembangunan bahagian belakang tutorial php php排序算法?php排序经典算法_PHP教程

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

Jul 13, 2016 am 10:47 AM
php Tidak beberapa betul ringkaskan menyusun artikel algoritma klasik

本文章来给大家总结几个不错的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.冒泡算法,排序算法,由于在排...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

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

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

See all articles