PDA

View Full Version : سوال: مرتب سازي آرايه با آرايه كمكي



Nil00 far
پنج شنبه 28 دی 1391, 00:38 صبح
سلام دوستان برنامم يه آرايست كه 7 تا عدد ميگيره و ميخواد عددهارو صعودي مرتب كنه
ولي واسه مرتب كردن بايد از يه آرايه كمكي استفاده كنه
شرط آرايه كمكي اينه كه انديس هر خانه برابربا مقذار و مقدار هر خانه برابر با تعداد عنصر در آرايه اول باشه
مثال :‌
انديس 1 2 3 4 5 6 7
مقدار 14 14 17 17 15 17 14
انديس 14 15 17
مقدار 3 1 3
خروجي 14 14 14 15 17 17 17
بايد از تابع arrary_count_values استفاده كنم ولي نميدونم چطوري :ناراحت:
خيلي عجله دارم كسي مي تونه كمكم كنه؟

mtchabok
پنج شنبه 28 دی 1391, 00:48 صبح
سلام
آیا اندیس و مقدار دوم هم ورودی تابع محسوب میشه ؟
و یا میخواید که هم آرایه مرتب شده و هم تعداد تکرار رو هم برگردونه ؟

Nil00 far
پنج شنبه 28 دی 1391, 08:37 صبح
نه ديگه واسه آرايه كمكي ورودي نمي گيره از آرايه اول درست ميشه
خروجي هم فقط آرايه مرتب شده رو برگردونه

mtchabok
پنج شنبه 28 دی 1391, 09:29 صبح
فرض میکنیم که آرایه شما در متغیر $array قرار داره
برای به ترتیب قرار گرفتنش از تابع asort استفاده میکنیم

asort($array);
که با اینکار آرایه مرتب شده در همون متغیر قرار میگیره .
خوب برای اینکه تعداد تکرار مقادیر محاسبه بشه از همون تابعی که خودتون گفتید استفاده میکنیم

$array1 = array_count_values($array)
خوب الان متغیر array1 تعداد مقادیر تکراری رو داره که برای اینکه به ترتیب هم باشه می تونیم به به صورت زیر با استفاده از تابع ksort مرتبش کنیم .

$array1 = array_count_values($array);
ksort($array1);

Nil00 far
پنج شنبه 28 دی 1391, 09:54 صبح
فرض میکنیم که آرایه شما در متغیر $array قرار داره
برای به ترتیب قرار گرفتنش از تابع asort استفاده میکنیم

asort($array);
که با اینکار آرایه مرتب شده در همون متغیر قرار میگیره .
خوب برای اینکه تعداد تکرار مقادیر محاسبه بشه از همون تابعی که خودتون گفتید استفاده میکنیم

$array1 = array_count_values($array)
خوب الان متغیر array1 تعداد مقادیر تکراری رو داره که برای اینکه به ترتیب هم باشه می تونیم به به صورت زیر با استفاده از تابع ksort مرتبش کنیم .

$array1 = array_count_values($array);
ksort($array1);

ممنونم ولي ميخوام با مقايسه مرتب كنه نه تابع sort

Nil00 far
پنج شنبه 28 دی 1391, 10:08 صبح
الان من ميخوام آرايه دوم رو بر اساس انديسهاش مقايسه كنم تا مرتب شن ولي نميدونم چطور اين مقايسه رو انجام بدم

darkface
پنج شنبه 28 دی 1391, 11:44 صبح
الان من ميخوام آرايه دوم رو بر اساس انديسهاش مقايسه كنم تا مرتب شن ولي نميدونم چطور اين مقايسه رو انجام بدم
باید از بابل سورت استفاده کنی.میاد دو تا دو تا مقایسه میکنه اگر اولی بزرگتر باشه تعویض میکنه با دومی

MMSHFE
جمعه 29 دی 1391, 00:15 صبح
<?php
$array = array(14, 14, 17, 17, 15, 17, 14); // The main array
$arrayCount = array_count_values($array); // Calculate the count of each value
$arrayKeys = array_keys($arrayCount); // Extract the keys (unique values of main array)
$count = count($arrayKeys); // Calculate the count of keys (unique values of main array)
for($i = 0; $i < $count; $i++) { // Sort the keys with bubble sort algorithm
for($j = $i + 1; $j < $count; $j++) { // .
if($arrayKeys[$i] > $arrayKeys[$j]) { // .
$arrayKeys[$i] += $arrayKeys[$j]; // Swap indices I and J of the keys array
$arrayKeys[$j] = $arrayKeys[$i] - $arrayKeys[$j]; // .
$arrayKeys[$i] -= $arrayKeys[$j]; // .
} // .
} // .
} // .
$sortedArray = array(); // The sorted array is empty at the beginning
foreach($arrayKeys as $key) { // Iterate the keys (unique values of main array)
for($i = 0; $i < $arrayCount[$key]; $i++) { // Repeat as many as the key count (repeat count of each value)
foreach($array as $index => $value) { // Iterate the main array
if($value == $key) { // If the current item equals the key (current unique value)
array_push($sortedArray, $value); // Push it into the sorted array
unset($array[$index]); // Remove it from the main array
} // .
} // .
} // .
} // .
echo '<pre>' . PHP_EOL; // Display the final sorted array as the result
var_dump($sortedArray); // .
echo '</pre>' . PHP_EOL; // .
?>