📅  最后修改于: 2023-12-03 14:40:26.480000             🧑  作者: Mango
本文介绍如何使用C语言编写程序,实现对数组的升序排序。排序算法采用快速排序(Quick Sort)算法。
快速排序是一种非常高效的排序算法,它的核心思想是分治法,将一个大问题分解成小问题来解决。具体实现过程如下:
快速排序的时间复杂度为 O(nlogn),其中 n 是数组的长度。
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
,其中 left
和 right
定义了当前子数组的范围。在函数中,我们首先判断当前子数组的长度是否大于 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语言代码。同时,我们也编写了简单的测试代码,通过验证运行结果,确保排序函数的正确性。