📜  C语言中QuickSort算法的通用实现(1)

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

C语言中QuickSort算法的通用实现

快速排序(QuickSort)是一种常用的排序算法,它的平均时间复杂度为 O(nlogn)。在大多数情况下,快速排序算法的性能优于其他常见的排序算法,如冒泡排序和插入排序。

本文将介绍C语言中快速排序算法的通用实现,并提供相应的代码示例。

算法实现步骤

快速排序算法的基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的数据小,然后再按此方法对这两部分数据分别进行快速排序,整个过程递归进行,以此达到整个数据变成有序序列。

具体的实现步骤如下:

  1. 选择一个基准元素(pivot element),可以是待排序序列的第一个元素。
  2. 将序列分成两个子序列,比基准元素小的放在左边,大于等于基准元素的放在右边。
  3. 对左右两个子序列递归地执行步骤1和2,直到每个子序列只包含一个元素或为空。
C语言代码实现

下面是C语言中快速排序算法的通用实现的代码示例:

#include <stdio.h>

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int partition(int arr[], int low, int high) {
    int pivot = arr[low];
    int i = low + 1;
    int j = high;

    while (1) {
        while (i <= j && arr[i] < pivot) {
            i++;
        }

        while (i <= j && arr[j] > pivot) {
            j--;
        }

        if (i > j) {
            break;
        }

        swap(&arr[i], &arr[j]);
    }

    swap(&arr[low], &arr[j]);

    return j;
}

void quickSort(int arr[], int low, int high) {
    if (low < high) {
        int pivotIndex = partition(arr, low, high);
        quickSort(arr, low, pivotIndex - 1);
        quickSort(arr, pivotIndex + 1, high);
    }
}

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {7, 2, 1, 6, 8, 5, 3, 6};
    int size = sizeof(arr) / sizeof(arr[0]);

    printf("Original array: ");
    printArray(arr, size);

    quickSort(arr, 0, size - 1);

    printf("Sorted array: ");
    printArray(arr, size);

    return 0;
}
代码说明

上述代码中,swap函数用于交换两个元素的值,partition函数用于将序列分割并返回基准元素的正确位置。quickSort函数是递归地对子序列进行快速排序的主要函数。

main函数中,我们可以看到如何使用快速排序算法对一个整型数组进行排序。

总结

快速排序算法是一种高效的排序算法,它对于大规模数据的排序有着良好的性能。通过理解快速排序算法的基本思想和实现步骤,我们可以在实际开发中灵活运用该算法解决排序问题。