📜  门| GATE CS Mock 2018年|问题21(1)

📅  最后修改于: 2023-12-03 14:58:22.992000             🧑  作者: Mango

GATE CS Mock 2018年 | 问题21

本题要求我们实现一个Java程序,该程序可以对一个由整数组成的数组进行排序,并返回排序后的数组。我们可以使用任何已经实现的排序算法来解决此问题。

实现思路:

我们可以使用Quick Sort、Merge Sort、Bubble Sort、Insertion Sort、Selection Sort等算法对数组进行排序。

以Quick Sort算法为例:

  1. 定义一个pivot为第一个元素(或其他元素);
  2. 遍历数组,将小于pivot的元素移至它的左边,将大于pivot的元素移至它的右边;
  3. 分别对左边的子数组和右边的子数组递归地重复步骤1-2;
  4. 返回排序后的数组。

以下是使用Quick Sort算法实现的代码片段:

public class QuickSort {
    public static void sort(int[] arr, int left, int right) {
        if (left < right) {
            int pivot_index = partition(arr, left, right);
            sort(arr, left, pivot_index-1);
            sort(arr, pivot_index+1, right);
        }
    }

    public static int partition(int[] arr, int left, int right) {
        int pivot = arr[left];
        int i = left + 1;
        int j = right;

        while (true) {
            while (i < j && arr[i] < pivot) i++;
            while (i < j && arr[j] > pivot) j--;

            if (i >= j) break;

            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;

            i++; j--;
        }

        if (pivot > arr[i]) {
            arr[left] = arr[i];
            arr[i] = pivot;
            return i;
        } else {
            return left;
        }
    }
}
测试示例:

我们可以使用以下代码片段进行测试:

public class Main {
    public static void main(String[] args) {
        int[] arr = new int[]{ 5, 2, 9, 1, 5, 6 };
        QuickSort.sort(arr, 0, arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
}

输出结果为:

[1, 2, 5, 5, 6, 9]