关于我的幼稚快速排序算法只是一个快速(哈哈)问题:我的快速排序实现有什么问题?
#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);
}
}
当我运行一个测试阵列上的代码,它似乎只有阵列(不到边的左侧)被排序并且不会跳转到排序右侧并创建一个无限循环。
运行代码之前有点警告,有时会在我测试阵列上运行代码时冻结我的机器。
无论如何,感谢您的帮助!此外,这不是用于作业(什么类与排序算法需要你马上学习快速排序?)
快速排序是我在大学的高级算法课程中学到的第一个算法,就像永远以前一样。 –
你正在运行windows吗? –
你使用'temp'是有点危险的。 'temp'是'int'但是'array [i];'在'temp = array [i];'是'T'。我会建议使用['std :: swap'](http://en.cppreference.com/w/cpp/algorithm/swap),但看起来很愚蠢。我用手写了10次,9次好,1次错。讨厌的错误。 'std :: swap(array [i],array [j])'应该这样做,并且已经被模板化了。 – luk32