快速排序是对冒泡排序的一种改进,基于分治法。
基本思想:在待排序列L[1...n] 中选取任一元素pivot作为基准,通过一趟排序将排序表划分为独立的两部分L[1...K-1]和[K+1...N],使得左边部分的元素小于pivot,右边的元素大于或等于pvoit,则pivot放在最终的位置L(K)上。然后分别递归的对两个子表重复上述过程,直至所有元素都放到最终位置上。
时间复杂度:快速排序平均性能最优,平均复杂度为O(NlogN),最坏情况下时间复杂度为O(n²)。
题目:输入n个数字,对其进行快速排序,输出结果
代码实现(C):
#include<stdio.h>
int a[101],n; //定义全局变量,这两个变量需要在子函数中用到
void QuickSort(int low, int high)
{
int i,j,pviot;
if(low>high)
return;
pviot=a[low];i=low;j=high;
while(i!=j)
{
while(i<j&&a[j]>=pviot)j--;
a[i]=a[j];
while(i<j&&a[i]<=pviot)i++;
a[j]=a[i];
}
a[i]=pviot;
QuickSort(low,i-1);
QuickSort(j+1,high);
}
int main()
{
int n,i,pviot;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
QuickSort(1,n);
for(i=1;i<=n;i++)
{
printf("%d",a[i]);
}
}
本文介绍快速排序的基本概念及其实现方法,基于分治法思想,选取基准元素进行分区,并递归地对左右子表进行排序。文章提供了一个使用C语言编写的快速排序示例代码。
473

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



