給定一個二維數組: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; } }