希尔排序与快速排序
public static void shellSort()
{
int h = 1;
while (randomNumbers.length > 3 * h + 1)
{
h = 3 * h + 1;
}
while (h >= 1)
{
for (int i = 0; i < h; i++)
{
// 内部就使用插入排序
for (int j = i, k = j + h; k < randomNumbers.length; j += h, k = j + h)
{
if (randomNumbers[j] > randomNumbers[j + h])
{
for (int k2 = j + h; k2 >= h && randomNumbers[k2 - h] > randomNumbers[k2]; k2--)
{
int temp = randomNumbers[k2];
randomNumbers[k2] = randomNumbers[k2 - h];
randomNumbers[k2 - h] = temp;
}
}
}
}
h = (h - 1) / 3;
}
}
public static void quickSort()
{
quickSort(0, randomNumbers.length - 1);
}
public static void quickSort(int left, int right)
{
if (left >= right)
{
return;
}
else
{
int partition = partitionIt(left, right);
quickSort(left, partition - 1);
quickSort(partition + 1, right);
}
}
public static int partitionIt(int left, int right)
{
int partition = right;
for (int i = left; i < right; i++)
{
if (i > partition && randomNumbers[i] < randomNumbers[partition])
{
int temp = randomNumbers[partition];
randomNumbers[partition] = randomNumbers[i];
randomNumbers[i] = temp;
temp = partition;
partition = i;
i = temp;
}
else if (i < partition && randomNumbers[i] > randomNumbers[partition])
{
int temp = randomNumbers[partition];
randomNumbers[partition] = randomNumbers[i];
randomNumbers[i] = temp;
partition = i;
}
}
return partition;
}