내 순진 퀵 알고리즘에 관한 단지 빠른 (하하하) 질문 : 시험 배열의 코드를 실행하면내 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);
}
}
, 보인다을 그 배열합니다 (이하 측의 왼쪽)가 정렬되고 오른쪽을 정렬하지 않고 무한 루프를 만듭니다.
코드를 실행하기 전에 약간의 경고가 표시되며 테스트 배열에서 코드를 실행하면 컴퓨터가 정지되는 경우가 있습니다.
어쨌든 도움 주셔서 감사합니다! 또한, 숙제가 아닙니다 (정렬 알고리즘을 사용하여 어떤 방면에서 배트를 배울 필요가 있습니까?)
퀵소트는 영원히 전에 대학에서 고급 알고리즘 수업에서 배운 첫 번째 알고리즘이었습니다. –
당신은 창문을 운영하고 있습니까? –
'temp '를 사용하면 위험합니다. 'temp'는'int'이지만'temp = array [i];의'array [i];'는'T'입니다. [std :: swap'] (http://en.cppreference.com/w/cpp/algorithm/swap)을 사용하는 것이 좋지만 바보 같을 수도 있습니다. 나는 그것을 손으로 10 번, 9 번 그리고 1 번 잘못 썼다. 불쾌한 버그. 'std :: swap (array [i], array [j])'는 트릭을 수행해야하며 이미 템플리트 화되어있다. – luk32