【C语言】快速排序算法的递归实现

222 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

【算法】快速排序算法的递归实现

一、目的 了解影响程序运行时间的主要因素;掌握渐近时间复杂度的表示方法;掌握递归程序的时间复杂度计算。 二、实验内容 (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.运算结果

image.png

2.时间复杂度计算结果 快速排序法:O(nlog2n) 选择排序法:O(n^2) 冒泡排序法:O(n^2)

image.png

3.分析 冒泡法排序相对来说比选择法简单,由于冒泡法每次都要交换元素的顺序,而选择法则只需要记录元素的下标,因此冒泡法效率较低。对于数据较小的数组,运用冒泡法足以胜任,对于数据较大的数组,选择法排序的效率会明显提高。而快速排序法故名思义是目前最快的排序法,但是不够冒泡排序法稳定。 五、实验小结 在该实验中我们主要完成了对多种排序算法的时间复杂度计算,并通过网络工具验证结果,最终得出了正确的答案。 在计算时间复杂度过程中,由于不够熟练,导致快速排序算法的时间复杂度多次错误后才得出结果。于是对时间复杂度计算进行了再次的分析学习,因此发觉上课认真听真的很重要!