C语言快速排序
快速排序算法的基本思想是基于分治法的:在待排序表L[1…n]中任取一个元素pivot作为枢轴(基准),通过一趟排序将待排序表划分为独立的两部分L[1…k-1]和L[k+1…n],使L[1…k-1]中的所有元素小于等于pivot,L[k+1…n]中的所有元素大于等于pivot,最后pivot放在L[k]上,这个过程称为一趟快速排序。然后分别递归两个子表重复上述过程,直至每部分只有一个元素或空为止。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Partition(int a[], int low, int high)
{
int pivot = a[low];
while (low < high)
{
while (low < high && a[high] >= pivot) high--;
a[low] = a[high];
while (low < high && a[low] <= pivot) low++;
a[high] = a[low];
}
a[low] = pivot;
return low;
}
void QuickSort(int a[],int low,int high)
{
if (low < high)
{
int index = Partition(a, low, high);
QuickSort(a, low, index - 1);
QuickSort(a, index + 1, high);
}
}
int main()
{
int n;
scanf("%d", &n);
int* a = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
QuickSort(a, 0, n - 1);
for (int i = 0; i < n; i++)
{
printf("%d\t", *(a + i));
}
return EXIT_SUCCESS;
}
本文详细介绍C语言中的快速排序算法,包括其基本思想、分治步骤和Partition函数的工作原理,同时提供了一段完整的示例代码。通过递归调用对数组进行排序,展示了快速排序的实际应用。
1081

被折叠的 条评论
为什么被折叠?



