📌  相关文章
📜  国际空间研究组织 | ISRO CS 2008 |问题 13(1)

📅  最后修改于: 2023-12-03 15:37:13.934000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2008 |问题 13

这道问题与排序算法有关。我们需要编写一个程序来实现快速排序算法,并将其应用于给定的数组。

问题描述

给定一个整数数组,要求使用快速排序算法进行排序,并输出排序后的数组。

示例

输入:

arr[] = {9, 4, 6, 3, 7, 1, 2, 8, 5}

输出:

1 2 3 4 5 6 7 8 9
解决方法
快速排序算法

快速排序算法是一种常见的排序算法,其核心思想是通过分治的方式,对数组进行排序。其基本思路是:

  1. 选取一个基准元素(pivot)作为比较的标准;
  2. 将数组分为两部分,左边的元素都小于等于基准元素,右边的元素都大于基准元素;
  3. 对左右两个子数组进行递归排序,直到数组被划分为只剩一个元素。

具体实现时,我们可以选择数组的第一个元素作为基准元素,然后通过遍历数组,将小于等于基准元素的元素放在左边,将大于基准元素的元素放在右边,最后再将基准元素放在两个子数组的中间。然后对两个子数组分别递归进行快速排序,直到排序完成。

下面是使用 Java 实现快速排序的代码:

public static void quickSort(int[] arr, int left, int right) {
    if (left < right) {
        int i = left, j = right, pivot = arr[left];
        while (i < j) {
            while (i < j && arr[j] > pivot) {
                j--;
            }
            if (i < j) {
                arr[i++] = arr[j];
            }
            while (i < j && arr[i] < pivot) {
                i++;
            }
            if (i < j) {
                arr[j--] = arr[i];
            }
        }
        arr[i] = pivot;
        quickSort(arr, left, i - 1);
        quickSort(arr, i + 1, right);
    }
}

这个算法的时间复杂度是 O(nlogn),我们可以看到,这个算法在时间效率上优于插入排序算法和冒泡排序算法。

代码实现

下面是使用 Python 实现快排的代码:

def quick_sort(lst, left, right):
    if left < right:
        i, j = left, right
        pivot = lst[left]
        while i < j:
            while i < j and lst[j] >= pivot:
                j -= 1
            if i < j:
                lst[i] = lst[j]
                i += 1
            while i < j and lst[i] <= pivot:
                i += 1
            if i < j:
                lst[j] = lst[i]
                j -= 1
        lst[i] = pivot
        quick_sort(lst, left, i - 1)
        quick_sort(lst, i + 1, right)

lst = [9, 4, 6, 3, 7, 1, 2, 8, 5]
quick_sort(lst, 0, len(lst) - 1)
print(lst)

运行结果为:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

以上就是本题的解决方法。