📌  相关文章
📜  C程序以升序对数组进行排序(1)

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

C程序以升序对数组进行排序

本文介绍如何使用C语言编写程序,实现对数组的升序排序。排序算法采用快速排序(Quick Sort)算法。

快速排序算法

快速排序是一种非常高效的排序算法,它的核心思想是分治法,将一个大问题分解成小问题来解决。具体实现过程如下:

  1. 以数组中任一一个元素(通常是第一个元素)为基准值(pivot)。
  2. 将数组中小于基准值的元素放到基准值的左侧,大于基准值的元素放到基准值的右侧。
  3. 分别对左右两个子数组递归地执行步骤 1 和步骤 2,直到所有子数组都只剩下一个元素。

快速排序的时间复杂度为 O(nlogn),其中 n 是数组的长度。

C语言代码
void quick_sort(int a[], int left, int right) {
    if (left >= right) {
        return;
    }

    int i = left;
    int j = right;
    int pivot = a[left];

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

        while (i < j && a[i] < pivot) {
            i++;
        }
        if (i < j) {
            a[j--] = a[i];
        }
    }

    a[i] = pivot;

    quick_sort(a, left, i - 1);
    quick_sort(a, i + 1, right);
}

上述代码中,函数 quick_sort 接收一个整型数组 a、数组的左边界 left 和数组的右边界 right,其中 leftright 定义了当前子数组的范围。在函数中,我们首先判断当前子数组的长度是否大于 1,如果小于等于 1,则说明当前子数组已经有序,无需进行排序。否则,我们以第一个元素为基准值,将整个子数组分成了两个部分,分别是小于等于基准值的部分和大于基准值的部分。之后我们对这两部分再递归地执行相同的排序过程,直到子数组全部有序。

测试代码

为了验证我们的排序函数是否正确,我们编写了如下的测试代码:

#include <stdio.h>

void quick_sort(int a[], int left, int right);

int main() {
    int a[] = {2, 6, 1, 3, 8, 7, 5, 4, 9};
    int n = sizeof(a) / sizeof(a[0]);

    quick_sort(a, 0, n - 1);

    for (int i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
    
    return 0;
}

上述测试代码中,我们定义了一个整型数组 a,并初始化了它。之后我们调用 quick_sort 函数对数组进行排序。最后,我们遍历整个数组,并打印出来,以验证排序函数是否正确。

运行结果

当我们编译并运行测试代码时,会得到如下的运行结果:

1 2 3 4 5 6 7 8 9

从结果可以看出,我们的排序函数排序正确,数组已经按升序排列。

总结

本文介绍了如何使用快速排序算法对数组进行升序排序,给出了相应的C语言代码。同时,我们也编写了简单的测试代码,通过验证运行结果,确保排序函数的正确性。