第七章快速排序之“快速插入排序”(练习7.4-5)

O(∩_∩)O~,这个名字乍听起来比较黄。其实就是先快速排序进行划分,等划分小到一定规模比如k时,进行插入排序,因为规模小到一定程度,插入排序的效率更高。我在前面还写过一个合并插入排序的算法,思想跟这个相似。

总的时间复杂度为O(nk+nlg(n/k)),这个很好证明:
先进行二分,划分到规模都为K时停止划分,此时深度为h,则T(n/2^h)=k,则h=lg(n/k),最底层规模为K的叶节点数目为2^lg(n/k)=n/k,每个k内部插入排序,最坏情况为O(k^2),则总的插入排序时间为(n/k)*(k^2)=nk。每一层的划分耗费为n,一共需划分lg(n/k)层,耗费为O(nlg(n/k))。则总的时间复杂度是两者相加共O(nk+nlg(n/k))。

代码如下:

#include <string.h>
#include <time.h>

#define BUFFER_SIZE 10

int Partition(int *a,int p,int r)
{
	int i=0;
	int j=0;
	int tmp=0;
	int x=0;
	
	i=p-1;
	x=a[r];
	for(j=p;j<r;j++)
	{
		if(a[j]<=x)
		{
			i++;
			tmp=a[i];
			a[i]=a[j];
			a[j]=tmp;
		}
	}
	tmp=a[i+1];
	a[i+1]=a[r];
	a[r]=tmp;
	
	return i+1;
}

int RandomPartition(int *a,int p,int r)
{
	int i=0;
	int tmp=0;
	
	srand((unsigned)time(NULL));
	i=rand()%(r-p+1)+p;
	
	tmp=a[i];
	a[i]=a[r];
	a[r]=tmp;
	
	return Partition(a,p,r);
}

void InsertionSort(int *a,int p,int r)
{
	int n=r-p+1;
	int b[n];
	int i=0;
	int j=0;
	
	b[0]=a[p];
	for(j=p+1;j<=r;j++)
	{
		i=j-1;
		while(i>=0&&a[j]<=b[i])
		{
			b[i+1]=b[i];
			i--;
		}
		b[i+1]=a[j];
	}
	for(j=p,i=0;j<=r;j++)
	{
		a[j]=b[i];
		i++;
	}
}

void RandomQuickSort(int *a,int p,int r,int k)
{
	int q=0;
	if(p>=r)
	{
		return;
	}
	
	if(r-p+1<k)
	{
		InsertionSort(a,p,r);
	}
	else
	{
		q=RandomPartition(a,p,r);
		RandomQuickSort(a,p,q-1,k);
		RandomQuickSort(a,q+1,r,k);
	}
}

int main()
{
	int i=0;
	int j=0;
	int a[BUFFER_SIZE]; 
	//随机生成数组 
	srand((unsigned)time(NULL));
	for(j=0;j<BUFFER_SIZE;j++)
	{
		a[j]=rand()%100;
	} 
	printf("随机生成的数组:\n");
	for(i=0;i<BUFFER_SIZE;i++)
	{
		printf("%d ",a[i]);
	} 
	printf("\n");
	
	RandomQuickSort(a,0,BUFFER_SIZE-1,1);
	printf("对数组进行快速插入排序:\n"); 
	for(i=0;i<BUFFER_SIZE;i++)
	{
		printf("%d ",a[i]);
	}
	
	system("pause");
	return 0;
} 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: gradle-7.4-bin是一个开源的构建工具,它主要用于Java应用程序、Android应用程序和Groovy项目的自动化构建。它是基于JVM的构建系统,能够自动下载和安装项目依赖,执行自定义构建任务并生成目标文件。gradle-7.4-bin 可以根据项目需求选择不同的任务和插件,支持多种构建工具或IDE,例如IntelliJ IDEA和Eclipse。同时,gradle-7.4-bin 也有很好的扩展能力,可以通过插件来扩展功能,从而满足更多特殊的构建需求。gradle-7.4-bin相较于其他构建工具,其最大的特点是具有更高效、更通用、更易于使用的优点。总之,gradle-7.4-bin是一个极其强大的开源构建工具,不仅可以使开发人员对项目的控制更加精细,同时也可以大大提高软件的质量与效率,因此在众多开发工具中受到了广泛的赞誉和应用。 ### 回答2: gradle-7.4-bin是Gradle的二进制文件,是Gradle构建工具的一个版本。Gradle是一个开源的构建自动化工具,它支持多种编程语言和多种构建系统。使用Gradle,开发者可以轻松地构建、测试和部署软件项目,同时也提供了强大的依赖管理。 gradle-7.4-bin中包含了Gradle的所有功能和特性,比如声明式依赖管理、插件系统以及任务管理。该版本还包含了改进的增量编译功能,大幅提升了构建的性能和速度。 相比于其他构建工具,Gradle具有灵活性和可配置性更强的特点。它支持自定义构建脚本和插件,也可以与其他工具集成,让开发者满足各种不同的项目需求。 总的来说,gradle-7.4-bin是Gradle的一个重要版本,它提供了更快、更可靠的构建功能,让开发者更加高效地进行项目开发和管理。 ### 回答3: gradle-7.4-bin是Gradle构建工具的二进制文件,它是Gradle 7.4版本的一个发行版本。Gradle是一个基于JVM的自动化构建工具,它可以帮助开发者在项目中执行编译、打包、测试、部署等任务。它使用Groovy或Kotlin编写build.gradle文件,允许开发者通过DSL语言来配置项目。在构建过程中,Gradle会自动识别和解决项目中的依赖关系,并且提供多种构建自定义选项。 gradle-7.4-bin的安装过程相对简单,只需要通过官方网站下载对应平台的压缩包,并解压到指定目录即可。使用gradle-7.4-bin需要先配置环境变量,以便在命令行使用gradle命令。随后,用户可以在项目工程中创建build.gradle文件,配置任务和依赖,然后执行gradle命令进行构建。在构建完成后,可以在指定的目录下找到生成的构建产物。 总之,gradle-7.4-bin是一个功能强大的构建工具,可以有效地提升项目的构建和部署效率,同时也提供了丰富的自定义选项,使得用户可以方便地在不同的项目中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值