本文已参与「新人创作礼」活动,一起开启掘金创作之路。
【算法】快速排序算法的递归实现
一、目的 了解影响程序运行时间的主要因素;掌握渐近时间复杂度的表示方法;掌握递归程序的时间复杂度计算。 二、实验内容 (1)对多个排序算法进行时间复杂度分析; (2)如(1)中没有递归,请给出递归实现排序,并分析时间复杂度。 三、设计和编码 1.快速排序递归算法
int Partition(int r[],int first,int end){
int i=first,j=end;
while(i<j){
while(i<j&&r[i]<=r[j]) j--;
if(i<j)
{
int temp=r[i];r[i]=r[j];r[j]=temp;
i++;
}
while (i<j&&r[i]<=r[j]) i++;
if(i<j){
int temp=r[i];r[i]=r[j];r[j]=temp;
j--;
}
}
return i;
}
void QuickSort(int r[],int first,int end){
int pivot;
if(first<end){
pivot=Partition(r,first,end);
QuickSort(r,first,pivot-1);
QuickSort(r,pivot+1,end);
}
}
int main(){
int a[5]={7,5,9,8,2};
printf("初始数组:7,5,9,8,2\n");
QuickSort(a,7,2);
putnum(a,5);
}
四、运行结果及分析 1.运算结果
2.时间复杂度计算结果 快速排序法:O(nlog2n) 选择排序法:O(n^2) 冒泡排序法:O(n^2)
3.分析 冒泡法排序相对来说比选择法简单,由于冒泡法每次都要交换元素的顺序,而选择法则只需要记录元素的下标,因此冒泡法效率较低。对于数据较小的数组,运用冒泡法足以胜任,对于数据较大的数组,选择法排序的效率会明显提高。而快速排序法故名思义是目前最快的排序法,但是不够冒泡排序法稳定。 五、实验小结 在该实验中我们主要完成了对多种排序算法的时间复杂度计算,并通过网络工具验证结果,最终得出了正确的答案。 在计算时间复杂度过程中,由于不够熟练,导致快速排序算法的时间复杂度多次错误后才得出结果。于是对时间复杂度计算进行了再次的分析学习,因此发觉上课认真听真的很重要!