Как мы знаем, в quicksort вы можете использовать Lomuto-Partition. Я проверил много ссылок и почти все они придумали следующую реализацию:Lomuto-Partition в быстрой сортировке
int L_partition(int *a, int l, int r)
{
int i, j, p, t;
p = a[r];
i = l - 1;
for(j =l; j <= r-1; j++) {
if(a[j] <= p) {
i++;
t = a[j];
a[j] = a[i];
a[i] = t;
}
}
t = a[i+1];
a[i+1] = a[r];
a[r] = t;
return i+1;
}
Мой вопрос, почему I начинается с л-1 и имеют все +- вещей ? Я думаю, что начните только с l в порядке. Я тестирую программу ниже. И он дает тот же результат, что и предыдущий. Это намного проще, чем выше.
int L_partition2(int *a, int l, int r)
{
int i, j, p, t;
p = a[r];
i = l;
for(j = l; j <= r-1; j++) {
if(a[j] <= p) {
t = a[j];
a[j] = a[i];
a[i] = t;
i++;
}
}
t = a[i];
a[i] = a[r];
a[r] = t;
return i;
}
Ваша версия лучше. Это эквивалентно, но имеет смысл и легче читать. Я не уверен, почему у книг это по-другому. – mrip
Поскольку это очень простой и классический алгоритм, мне интересно, пропустил ли я какой-либо момент. Практически все веб-сайты и слайды из курса колледжей CS используют первый подход. – deepsky
Это странно. Не имеет большого значения, это тот же алгоритм, но IMO ваш лучший код. Возможно, материал (i-1) (i + 1) появился в каком-то старом тексте, и все остальные просто скопировали его. – mrip