现在的位置: 首页 > 综合 > 正文

希尔排序与快速排序

2012年01月13日 ⁄ 综合 ⁄ 共 1841字 ⁄ 字号 评论关闭

    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;
    }

抱歉!评论已关闭.