自创排序算法(本以为是nlogn级,后来发现是n*n级)

6 篇文章 0 订阅
2 篇文章 0 订阅

今天在网上上了算法设计课,学了算法的时间复杂度分析和分治思想,受老师课上一道题目启发,自己找到了排序算法的新算法,时间复杂度为O(nlogn),无论好坏情况都是这个量级,有兴趣的朋友可以看一看,探索更多的算法。

#include <iostream>
using namespace std;

void find_min(int s[],int l,int r); 
void special_sort(int s[],int l,int r);

int main(){
	int s[]={34,4,54,6,343,900,-34,54,343532,-3453};
	int n=0;
	for(int &e:s){
		n++;
	}
	special_sort(s,0,n-1);
	for(int i=0;i<n;++i)cout<<s[i]<<endl;
	return 0;
}

void find_min(int s[],int l,int r){
	if(r-l<=2){
		for(int i=r;i>l;i--){
			if(s[i]<s[i-1]){
				swap(s[i],s[i-1]);
			}
		}
	}
	else{
		find_min(s,l,(l+r)/2);
		find_min(s,(l+r)/2+1,r);
		if(s[l]>s[(l+r)/2+1]){
			swap(s[l],s[(l+r)/2+1]);
		}
	}
}

void special_sort(int s[],int l,int r){
	for(int i=l;i<r-1;i++){
		find_min(s,i,r);
	}
}
思想其实很简单,先写了一个将一个数组最小值排到数组第一个位置的函数find_min(),用了分治的方法,将时间复杂度控制在O(logn),然后在排序的函数,即special_sort()中循环调用find_min()。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 一个nlogn算法的运行时间通常比一个O(n)算法的运行时间更短。具体来说,n=100,000时,nlogn算法的速度通常比O(n)算法的速度要快得多。这种速度差异在大数据集上会更明显。 假设我们有一个O(n)算法和一个O(nlogn)算法,它们的时间复杂度为T1(n)和T2(n),则当n=100,000时,它们的运行时间分别为: T1(n) = 100,000 = 100,000 T2(n) = 100,000 * log(100,000) ≈ 1,000,000 因此,当n=100,000时,一个O(nlogn)算法的速度通常比O(n)算法的速度快约10倍。 ### 回答2: 要计算n的算法速度是nlogn算法速度的多少倍,首先我们需要确定nlogn算法的速度。假设nlogn算法的速度为T1。 nlogn算法的时间复杂度为O(nlogn),意味着当输入规模为n时,算法的执行时间与n乘以以2为底的对数n成正比。 对于n = 100,000的情况,我们可以计算nlogn算法的执行时间为T1 = 100,000 * log2(100,000)。 接下来,我们来计算n算法的速度。假设n算法的时间复杂度为O(n),意味着当输入规模为n时,算法的执行时间与n成正比。 同样对于n = 100,000的情况,我们可以计算n算法的执行时间为T2 = 100,000。 现在,我们可以计算n算法的速度相对于nlogn算法的速度。计算公式为:速度倍数 = T1 / T2。 代入T1和T2的值,我们可以计算速度倍数 = (100,000 * log2(100,000)) / 100,000。 具体计算过程如下: 速度倍数 = (100,000 * log2(100,000)) / 100,000 ≈ (100,000 * 16.6096404744) / 100,000 ≈ 16.6096404744 所以,n的算法速度是nlogn算法速度的约16.61倍。 ### 回答3: 要计算n = 100,000时,n的算法速度是nlogn算法速度的多少倍,我们首先需要知道nlogn算法的速度。 nlogn算法的速度是O(nlogn),它是随着n的增加而增加的,但增速相对较慢。而n = 100,000的情况下,其速度是O(100,000 * log(100,000))。 我们可以对比两者的增速。假设nlogn算法的速度是k,那么n = 100,000时的算法速度就是100,000 * log(100,000)。要计算k,我们可以设立以下方程: k * nlogn = 100,000 * log(100,000) 将n代入后,得到: k * (100,000 * log(100,000)) = 100,000 * log(100,000) 化简方程,得到: k = 1 即n的算法速度是nlogn算法速度的1倍。也就是说,当n = 100,000时,n的算法速度和nlogn算法速度相同。 这说明对于较大的n值,n的算法速度和nlogn算法速度相差不大,因此在这种情况下,我们可以选择使用更简单的线性算法来处理问题,而不必使用更复杂的nlogn算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值