我正在尝试对整数数组进行排序。我的快速排序算法可以很好地处理10个或更少的数字,但是一旦添加更多,就不能正确对它们进行排序?
无论是否有Shuffle(左,右),它都以相同的方式工作,所以我认为问题不存在。我将使用该代码对大量数字进行排序,我认为快速排序是我数据中最有效的选择。
private static int[] intArray;
static void Main(string[] args)
{
data = new int[] { 1, 9, 10, 2, 4, 5, 6, 3, 257, -6 };
int N = data.Length;
intArray = new int[N];
long before = Environment.TickCount;
long after = Environment.TickCount;
QuickSort(0, N - 1);
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine(data[i]);
}
}
private static int Pivot(int left, int right)
{
int pivot = data[left];
while (true)
{
while (data[left] < pivot)
{
left++;
}
while (data[right] > pivot)
{
right--;
}
if (left < right)
{
if (data[left] == data[right])
{
return right;
}
int temp = data[left];
data[left] = data[right];
data[right] = temp;
}
else
{
return right;
}
}
}
private static void QuickSort(int left, int right)
{
Shuffle(left, right);
if (left < right)
{
int pivot = Pivot(left, right);
if (pivot > 1)
{
QuickSort(left, pivot - 1);
}
else if (pivot + 1 < right)
{
QuickSort(pivot + 1, right);
}
}
}
Shuffle()看起来像这样:
修正了注释中指出的问题。随机播放使它相对较慢: