Вам нужно использовать правильную процедуру quicksort, так как Hoare разбивает массив на левую часть и правую часть, в отличие от Lomuto, которая разбивает массив на левую часть, поворот, правую часть.
algorithm quicksort(A, lo, hi) is
if lo < hi then
p := partition(A, lo, hi)
quicksort(A, lo, p) // not quicksort(A, lo, p-1)
quicksort(A, p + 1, hi)
также выбирая точку опоры в середине означает, что уже отсортированы или обратный отсортированный массив отсортирован быстро в противоположность худшему:
pivot := A[lo+(hi-lo)/2] // or := A[(lo+hi)/2] if overflow not an issue
Там все равно будет хуже моделей случае, но, по крайней мере, простые из них являются обрабатываются. Медиана 3 немного медленнее, но уменьшает количество наихудших шаблонов:
md = lo + (hi-lo)/2
if (A[lo] > A[hi])
swap(A[lo], A[hi])
if (A[lo] > A[md])
swap(A[lo], A[md])
if (A[md] > A[hi])
swap(A[md], A[hi])
pivot := a[md]
Возможно, то, что вы ищете, - это быстрый выбор, чтобы найти k-й элемент, где k = размер массива / 2. Он похож на быстрый вид, но он рекурсивно ищет только левую или правую часть массива, содержащего k-ый элемент. Статья в вики:
strlen(base64_decode($encoded_data));
И как основное правило, кодировка base64 увеличивает исходные данные в размере примерно на 33%
Используйте следующий код:
function getFileSizeInKb($base64string){
$bytes = strlen(base64_decode($base64string));
$roughsize = (((int)$bytes) / 1024.0)* 0.67;
return round($roughsize,2);
}
Если вы хотите знать размер без декодирования, я считаю, что следующие работы:
$size = (int) (strlen(rtrim($data, '=')) * 3 / 4);
Или:
$size = (strlen($data) * 3 / 4) - substr_count(substr($data, -2), '=');
В противном случае просто используйте strlen()
на декодированные данные, как указано в Marc.
Попробуйте это, вы получите размер в байтах, KB и MB тоже ..
public function getBase64ImageSize($base64Image){ //return memory size in B, KB, MB
try{
$size_in_bytes = (int) (strlen(rtrim($base64Image, '=')) * 3 / 4);
$size_in_kb = $size_in_bytes / 1024;
$size_in_mb = $size_in_kb / 1024;
return $size_in_mb;
}
catch(Exception $e){
return $e;
}
}