C语言快速排序算法实现及代码解析
C语言快速排序算法实现及代码解析
快速排序算法是一种高效的排序算法,它采用分治策略,将待排序数组划分为两个子数组,分别对子数组进行排序,最终得到有序的数组。
算法原理
快速排序算法的基本思想是:
- 选择基准元素: 从数组中选择一个元素作为基准元素。
- 划分数组: 将数组划分为两个子数组,一个子数组包含所有小于基准元素的元素,另一个子数组包含所有大于基准元素的元素。
- 递归排序: 对两个子数组递归地进行快速排序。
代码实现
#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是待排序数组,start和end分别表示排序范围的起始位置和结束位置。- 函数首先判断
start是否小于end,如果小于,则继续排序;否则,表示已经排序完成。 - 然后选择数组的第一个元素作为基准元素,将其赋值给变量
x。 - 使用两个指针
i和j,分别指向数组的起始位置和结束位置。 - 通过循环,将小于基准元素的元素放置在指针
i的左边,大于基准元素的元素放置在指针j的右边。 - 最后,将基准元素放置在
i的位置,并递归地对左右两边的子数组进行快速排序。
总结
快速排序算法是一种常用的排序算法,它具有较高的效率,尤其适合对较大的数组进行排序。本文通过详细的代码实现和解析,帮助读者更好地理解快速排序算法的原理和实现方法。
原文地址: https://www.cveoy.top/t/topic/nX9V 著作权归作者所有。请勿转载和采集!