Как можно пересортировать массив по моему алгоритму?
Какой алгоритм не понятен, но ключевые слова: "пересортировать массив по моему алгоритму"  - это одна из 2 функций:
php.net/uasort
php.net/uksort
------------------------------------
Если по новому ставится задача то легче сделать так:
1. выделяете ключевые слова (продам, продаётся, продажа" 
2. выделяются вторые слова 
3. склеиваются.$keys  = ["Продам", "Продаётся", "Продажа"];
$words = ["котлету", "ботинок", "семки"];

$groupSize  = 3;
$amount = sizeof($keys)*sizeof($words);
$list = array_fill(0,$amount, "");
foreach ($keys as $group => $groupName) {
    foreach ($words as $item => $word) {

        $index = (($group+$item) * $groupSize + $group)%$amount;

        $list[$index] = $groupName . ' ' . $word;


    }

}

print_r($list);
Или, если вы хотите по частям, то например так:/** Создаём список. важно что он имеет строгий формат */
$keys  = ["Продам", "Продаётся", "Продажа"];
$words = ["котлету", "ботинок", "семки"];

$list = [];
foreach ($words as $wordId => $word) {
    foreach ($keys as $groupId => $groupName) {
        $list[] = $groupName . ' ' . $word;
    }
}
// сортируем
$groupSize  = 3;
$output = array_fill(0, sizeof($list), "");

foreach ($list as $id => $string) {
    $group = floor($id/$groupSize);
    $item = $id%$groupSize;
    $index = (($group+$item) * $groupSize + $item)%sizeof($list);
    $output[$index] = $string;

}

print_r($output);
в функции создайте временный массив и добавляйте к нему нужные элементы с нужными индексами потом временый масив на выход через return