C语言快速排序算法实现及代码解析

快速排序算法是一种高效的排序算法,它采用分治策略,将待排序数组划分为两个子数组,分别对子数组进行排序,最终得到有序的数组。

算法原理

快速排序算法的基本思想是:

  1. 选择基准元素: 从数组中选择一个元素作为基准元素。
  2. 划分数组: 将数组划分为两个子数组,一个子数组包含所有小于基准元素的元素,另一个子数组包含所有大于基准元素的元素。
  3. 递归排序: 对两个子数组递归地进行快速排序。

代码实现

#include <stdio.h>

// 定义数组结构体
typedef struct {
    int key;
    // 其他数据成员
} sqlist;

// 快速排序算法实现
void QuickSort(sqlist A[], int start, int end) {
    if (start < end) {
        int i = start;
        int j = end;
        int x = A[start].key;
        while (i < j) {
            while (i < j && A[j].key >= x) {
                j--;
            }
            if (i < j) {
                A[i] = A[j];
                i++;
            }
            while (i < j && A[i].key <= x) {
                i++;
            }
            if (i < j) {
                A[j] = A[i];
                j--;
            }
        }
        A[i].key = x;
        QuickSort(A, start, i - 1);
        QuickSort(A, i + 1, end);
    }
}

int main() {
    // 初始化数组
    sqlist A[5] = {{5}, {2}, {4}, {6}, {1}};

    // 对数组进行快速排序
    QuickSort(A, 0, 4);

    // 打印排序后的数组
    for (int i = 0; i < 5; i++) {
        printf("%d ", A[i].key);
    }
    printf("\n");

    return 0;
}

代码解析

  • QuickSort(sqlist A[], int start, int end) 函数是快速排序算法的核心函数,其中 A 是待排序数组,startend 分别表示排序范围的起始位置和结束位置。
  • 函数首先判断 start 是否小于 end,如果小于,则继续排序;否则,表示已经排序完成。
  • 然后选择数组的第一个元素作为基准元素,将其赋值给变量 x
  • 使用两个指针 ij,分别指向数组的起始位置和结束位置。
  • 通过循环,将小于基准元素的元素放置在指针 i 的左边,大于基准元素的元素放置在指针 j 的右边。
  • 最后,将基准元素放置在 i 的位置,并递归地对左右两边的子数组进行快速排序。

总结

快速排序算法是一种常用的排序算法,它具有较高的效率,尤其适合对较大的数组进行排序。本文通过详细的代码实现和解析,帮助读者更好地理解快速排序算法的原理和实现方法。

C语言快速排序算法实现及代码解析

原文地址: https://www.cveoy.top/t/topic/nX9V 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录