только быстрый (хахаха) вопрос относительно моего наивного алгоритма быстрой сортировки:Что случилось с моей реализацией quicksort?
#include <iostream>
template <class T>
void quicksort2(T array[] , int start, int end){
int i = start;
int j = end;
int temp;
int pivot = (end - start)/2;
// Partioning
while(i <= j){
while(array[i] < array[pivot]){
i++;
}
while(array[j] > array[pivot]){
j--;
}
if(i <= j){
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}
// Sorting partions
if(start <= j){
quicksort2(array , start , j);
}
if(end >= i){
quicksort2(array , i , end);
}
}
Когда я запускаю код его на тестовом массиве, то кажется, что только левая часть массива (меньше, чем на стороне) сортируется и никогда не переходит к сортировке правой части и создает бесконечный цикл.
Немного предупреждения перед запуском кода, иногда он замерзает мою машину, когда я запускаю код в тестовом массиве.
В любом случае, спасибо за помощь! Кроме того, это не для домашних заданий (Какой класс с алгоритмами сортировки требует, чтобы вы изучили быструю сортировку сразу с места в карьер?)
Quicksort был первым алгоритмом, который я изучил в своем передовом классе алгоритмов в колледже, как и раньше. –
Вы используете окна? –
Ваше использование 'temp' является своего рода опасным. 'temp' является' int', но 'array [i];' in 'temp = array [i];' is 'T'. Я бы предложил использовать ['std :: swap'] (http://en.cppreference.com/w/cpp/algorithm/swap), каким бы глупым это ни казалось. Я написал это вручную 10 раз, 9 хороших и 1 неправильно. Неприятная ошибка. 'std :: swap (array [i], array [j])' должен делать трюк и уже шаблонизирован. – luk32