自己写了一个快速排序,但是测试的时候发现:如果待排序列有相同数字的话,那么排序结果就出错,没有发现哪里出问题了,哪位大侠发现错误的话请指出来,或者推荐一下讲解如何调试的书籍,感激不尽!
代码如下:
#include <iostream>
int * Quick_Sort(int array[], int low, int high);
void Show_Array(int array[], int array_size);
int Partition( int array[], int low, int high );
int main()
{
std::cout << "Please enter the size of array you want: ";
int size;
std::cin >> size;
int *array = new int[size];
std::cout << "Please enter " << size << " element(s):\n";
for(int i = 0; i < size; i++)
std::cin >> array[i];
Quick_Sort( array, 0, size-1);
Show_Array( array, size);
delete []array;
std::cin.get();
std::cin.get();
}
/QuickSort
int * Quick_Sort(int array[], int low, int high)
{
if( low < high )
{
int pivot_location = Partition(array, low, high);
Quick_Sort(array, low, pivot_location-1 );
Quick_Sort(array, pivot_location+1, high );
}
return array;
}
int Partition( int array[], int low, int high ) //返回轴心的位置,被Quick_Sort调用
{
int pivot_key = array[low]; //默认将数组第一个元素作为轴心
while (low < high )
{
while( low < high && array[high] > pivot_key )
{
--high;
}
array[low] = array[high];
while( low < high && array[low] < pivot_key )
{
++low;
}
array[high] = array[low];
}
array[low] = pivot_key; //每次至少一个元素会排到最终的位置
return low;
}
void Show_Array(int array[], int array_size)
{
std::cout << "the array is:\n";
for ( int i = 0; i < array_size; ++i )
std::cout << array[i] << " ";
std::cout << std::endl;
}