php面試題--並列排名問題


  給定一個二維數組:

    

<?php
    $data = [
                ['name' =>'j1', 'score' => '80'],
                ['name' =>'j2', 'score' => '90'],
                ['name' =>'j3', 'score' => '50'],
                ['name' =>'j4', 'score' => '70'],
                ['name' =>'j5', 'score' => '95'],
                ['name' =>'j6', 'score' => '100'],
                ['name' =>'j7', 'score' => '60'],
                ['name' =>'j8', 'score' => '50'],
          ['name' =>'j9', 'score' => '80'],
]; ?>

最后的結果為:

[
    ['name' => 'j6', 'score' => '100', 'deep' => 1],
    ['name' => 'j5', 'score' => '95', 'deep' => 2],
    ['name' => 'j2', 'score' => '90', 'deep' => 3],
    ['name' => 'j1', 'score' => '80', 'deep' => 4],
['name' => 'j9', 'score' => '80', 'deep' => 4], ['name' => 'j4', 'score' => '70', 'deep' => 5], ['name' => 'j7', 'score' => '60', 'deep' => 6], ['name' => 'j3', 'score' => '50', 'deep' => 7], ['name' => 'j8', 'score' => '50', 'deep' => 7] ]

要求所有關於排序的操作都不能使用php自帶的系統函數,必須自己寫排序算法(冒泡、插入、選擇、快排.....),時間20分鍾

 

2018年都過了27天了,總結下自己2017年的面試經歷吧。這是上次面試遇到的編程問題,與大家分享自己的處理方法:

先排序用的是選擇排序(其實面試那天用的是冒泡算法,當時做完沒法拷貝,現在是我第一家公司做的某個項目寫的,最后程序可能結果不對,但是我的思路就是先排序在排名,人比較懶,也不想再去寫那個冒泡了,實際開發中我都是用的是php自帶的系統函數處理的有一個很牛逼的排序函數uasort(),還支持callback,案列地址:http://www.jb51.net/article/71654.htm

        for($i=0;$i<count($barr)-1;$i++){
                $minIndex = $i;   //自己假定是最大的
                for($j=$i+1;$j<count($barr);$j++){
                    if($barr[$minIndex]['num'] < $barr[$j]['num']){//如果這個值比最大的還大
                       $minIndex = $j;                       
                    }
                }
                if($minIndex != $i){
                    $temp = $barr[$minIndex];
                    $barr[$minIndex] = $barr[$i];
                    $barr[$i] = $temp;                
                }
                
        }

 排名:原理就是循環數組,追加deep值,由於是按照從高到低的順序排列的,那么第一個就是第一名,當相鄰兩個數字一樣deep就不加否則就加+1

$p = 1;
foreach ($barr as $k => $v) {
               if ($k==0) {
                    $barr[$k]'deep'] = 1;
                } else {
                     if($barr[$k-1]['score']==$arr[$k]['score'])
                          $barr[$k]['deep']=$p;
                }else{
                          $barr[$k]['deep']=++$p;
                }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM