南通建设网站公司server2012 wordpress
2026/1/11 12:20:12 网站建设 项目流程
南通建设网站公司,server2012 wordpress,宠物网页设计图片,wordpress登入后缀以下提供 Python、Go、C 三种语言的性能测试代码#xff0c;统一测试两种算法在 随机数据、部分有序数据、完全有序数据 三种场景下的执行时间#xff0c;数据规模覆盖 1k/10k/100k/1M 元素#xff1a; 一、Python 性能测试代码import time import random from typing impor…以下提供 Python、Go、C 三种语言的性能测试代码统一测试两种算法在 随机数据、部分有序数据、完全有序数据 三种场景下的执行时间数据规模覆盖 1k/10k/100k/1M 元素一、Python 性能测试代码importtimeimportrandomfromtypingimportCallable,List# ---------------------- 待测试算法 ----------------------# 1. 之前的快排变种原逻辑复现definsertion_sort(arr:List[int])-List[int]:iflen(arr)1:returnarr.copy()arr_copyarr.copy()nlen(arr_copy)foriinrange(1,n):keyarr_copy[i]ji-1whilej0andarr_copy[j]key:arr_copy[j1]arr_copy[j]j-1arr_copy[j1]keyreturnarr_copydefquick_sort_simple(arr:List[int],threshold_ratio:float1/16)-List[int]:iflen(arr)1:returnarr.copy()ratiothreshold_ratio thresholdmax(1,int(len(arr)*ratio))def_sort(sub_arr:List[int])-List[int]:iflen(sub_arr)threshold:returninsertion_sort(sub_arr)pivotsub_arr[len(sub_arr)//2]left[xforxinsub_arrifxpivot]middle[xforxinsub_arrifxpivot]right[xforxinsub_arrifxpivot]return_sort(left)middle_sort(right)return_sort(arr.copy())# 2. Timsort前文实现importbisectdeftimsort(arr:List[int])-List[int]:arrarr.copy()nlen(arr)MIN_RUN32definsertion_sort_sub(arr:List[int],left:int,right:int)-None:foriinrange(left1,right1):keyarr[i]ji-1whilejleftandarr[j]key:arr[j1]arr[j]j-1arr[j1]keyforiinrange(0,n,MIN_RUN):endmin(iMIN_RUN-1,n-1)insertion_sort_sub(arr,i,end)defmerge(a:List[int],b:List[int])-List[int]:res[]ij0len_a,len_blen(a),len(b)whileilen_aandjlen_b:ifa[i]b[j]:kbisect.bisect_right(a[i:],b[j])res.extend(a[i:ik])ikelse:kbisect.bisect_right(b[j:],a[i])res.extend(b[j:jk])jk res.extend(a[i:])res.extend(b[j:])returnres sizeMIN_RUNwhilesizen:forleftinrange(0,n,2*size):midmin(leftsize-1,n-1)rightmin(left2*size-1,n-1)ifmidright:mergedmerge(arr[left:mid1],arr[mid1:right1])arr[left:leftlen(merged)]merged size*2returnarr# ---------------------- 性能测试工具 ----------------------defgenerate_test_data(size:int,data_type:str)-List[int]:生成测试数据random/partial_sorted/sortedrandom.seed(42)# 固定种子保证可复现arrlist(range(size))ifdata_typerandom:random.shuffle(arr)elifdata_typepartial_sorted:# 80%有序20%随机打乱foriinrange(size//5):idx1,idx2random.randint(0,size-1),random.randint(0,size-1)arr[idx1],arr[idx2]arr[idx2],arr[idx1]returnarrdeftest_algorithm(func:Callable[[List[int]],List[int]],data:List[int],name:str)-float:测试算法执行时间返回耗时秒starttime.perf_counter()func(data)endtime.perf_counter()耗时end-startprint(f{name:20}耗时:{耗时:.6f}秒)return耗时# ---------------------- 执行测试 ----------------------if__name____main__:数据规模列表[1000,10000,100000,1000000]数据类型列表[random,partial_sorted,sorted]算法列表[(快排变种,quick_sort_simple),(Timsort,timsort)]for数据规模in数据规模列表:print(f\n 数据规模:{数据规模}元素 )for数据类型in数据类型列表:print(f\n【{数据类型}数据】)测试数据generate_test_data(数据规模,数据类型)for算法名称,算法函数in算法列表:test_algorithm(算法函数,测试数据,算法名称)二、Go 性能测试代码packagemainimport(bufiofmtmath/randossorttime)// ---------------------- 待测试算法 ----------------------// 1. 之前的快排变种原逻辑复现funcinsertionSort(arr[]int)[]int{iflen(arr)1{returnappend([]int(nil),arr...)}arrCopy:append([]int(nil),arr...)n:len(arrCopy)fori:1;in;i{key:arrCopy[i]j:i-1forj0arrCopy[j]key{arrCopy[j1]arrCopy[j]j--}arrCopy[j1]key}returnarrCopy}funcQuickSortSimple(arr[]int)[]int{iflen(arr)1{returnappend([]int(nil),arr...)}ratio:1.0/16.0threshold:max(1,int(float64(len(arr))*ratio))var_sortfunc([]int)[]int_sortfunc(subArr[]int)[]int{iflen(subArr)threshold{returninsertionSort(subArr)}pivot:subArr[len(subArr)/2]varleft,middle,right[]intfor_,x:rangesubArr{switch{casexpivot:leftappend(left,x)casexpivot:middleappend(middle,x)default:rightappend(right,x)}}returnappend(append(_sort(left),middle...),_sort(right)...)}return_sort(append([]int(nil),arr...))}funcmax(a,bint)int{ifab{returna}returnb}// 2. Timsort前文实现constminRun32funcinsertionSortSub(arr[]int,left,rightint){fori:left1;iright;i{key:arr[i]j:i-1forjleftarr[j]key{arr[j1]arr[j]j--}arr[j1]key}}funcmerge(a,b[]int)[]int{res:make([]int,0,len(a)len(b))i,j:0,0lenA,lenB:len(a),len(b)forilenAjlenB{ifa[i]b[j]{k:sort.Search(len(a)-i,func(idxint)bool{returna[iidx]b[j]})resappend(res,a[i:ik]...)ik}else{k:sort.Search(len(b)-j,func(idxint)bool{returnb[jidx]a[i]})resappend(res,b[j:jk]...)jk}}resappend(res,a[i:]...)resappend(res,b[j:]...)returnres}funcTimsort(arr[]int)[]int{arrCopy:make([]int,len(arr))copy(arrCopy,arr)n:len(arrCopy)ifnminRun{insertionSortSub(arrCopy,0,n-1)returnarrCopy}fori:0;in;iminRun{end:iminRun-1ifendn{endn-1}insertionSortSub(arrCopy,i,end)}size:minRunforsizen{forleft:0;leftn;left2*size{mid:leftsize-1right:left2*size-1ifmidn{break}ifrightn{rightn-1}ifmidright{continue}merged:merge(arrCopy[left:mid1],arrCopy[mid1:right1])copy(arrCopy[left:leftlen(merged)],merged)}size*2}returnarrCopy}// ---------------------- 性能测试工具 ----------------------funcgenerateTestData(sizeint,dataTypestring)[]int{rand.Seed(42)arr:make([]int,size)fori:rangearr{arr[i]i}switchdataType{caserandom:rand.Shuffle(size,func(i,jint){arr[i],arr[j]arr[j],arr[i]})casepartial_sorted:fori:0;isize/5;i{idx1:rand.Intn(size)idx2:rand.Intn(size)arr[idx1],arr[idx2]arr[idx2],arr[idx1]}}returnarr}functestAlgorithm(funcNamestring,ffunc([]int)[]int,data[]int)float64{start:time.Now()f(data)elapsed:time.Since(start).Seconds()fmt.Printf(%-20s 耗时: %.6f 秒\n,funcName,elapsed)returnelapsed}// ---------------------- 执行测试 ----------------------funcmain(){dataSizes:[]int{1000,10000,100000,1000000}dataTypes:[]string{random,partial_sorted,sorted}algorithms:[]struct{namestringfnfunc([]int)[]int}{{快排变种,QuickSortSimple},{Timsort,Timsort},}for_,size:rangedataSizes{fmt.Printf(\n 数据规模: %d 元素 \n,size)for_,dtype:rangedataTypes{fmt.Printf(\n【%s 数据】\n,dtype)data:generateTestData(size,dtype)for_,algo:rangealgorithms{testAlgorithm(algo.name,algo.fn,data)}}}// 防止程序退出可选fmt.Println(\n测试完成按回车退出...)bufio.NewReader(os.Stdin).ReadByte()}三、C 性能测试代码#includevector#includealgorithm#includeiostream#includechrono#includerandom#includeiomanipusingnamespacestd;usingnamespacechrono;// ---------------------- 待测试算法 ----------------------// 1. 之前的快排变种原逻辑复现vectorintinsertionSort(vectorintarr){if(arr.size()1)returnarr;intnarr.size();for(inti1;in;i){intkeyarr[i];intji-1;while(j0arr[j]key){arr[j1]arr[j];--j;}arr[j1]key;}returnarr;}vectorintquickSortSimple(vectorintarr,floatthresholdRatio1.0/16.0){if(arr.size()1)returnarr;intthresholdmax(1,(int)(arr.size()*thresholdRatio));functionvectorint(vectorint)_sort[](vectorintsubArr)-vectorint{if(subArr.size()threshold){returninsertionSort(subArr);}intpivotsubArr[subArr.size()/2];vectorintleft,middle,right;for(intx:subArr){if(xpivot)left.push_back(x);elseif(xpivot)middle.push_back(x);elseright.push_back(x);}vectorintres_sort(left);res.insert(res.end(),middle.begin(),middle.end());vectorintrightSorted_sort(right);res.insert(res.end(),rightSorted.begin(),rightSorted.end());returnres;};return_sort(arr);}// 2. Timsort前文实现constexprintMIN_RUN32;voidinsertionSortSub(vectorintarr,intleft,intright){for(intileft1;iright;i){intkeyarr[i];intji-1;while(jleftarr[j]key){arr[j1]arr[j];--j;}arr[j1]key;}}vectorintmerge(vectorinta,vectorintb){vectorintres;res.reserve(a.size()b.size());inti0,j0;intlenAa.size(),lenBb.size();while(ilenAjlenB){if(a[i]b[j]){autoitupper_bound(a.begin()i,a.end(),b[j]);res.insert(res.end(),a.begin()i,it);iit-a.begin();}else{autoitupper_bound(b.begin()j,b.end(),a[i]);res.insert(res.end(),b.begin()j,it);jit-b.begin();}}res.insert(res.end(),a.begin()i,a.end());res.insert(res.end(),b.begin()j,b.end());returnres;}vectorinttimsort(vectorintarr){intnarr.size();if(nMIN_RUN){insertionSortSub(arr,0,n-1);returnarr;}for(inti0;in;iMIN_RUN){intendmin(iMIN_RUN-1,n-1);insertionSortSub(arr,i,end);}intsizeMIN_RUN;while(sizen){for(intleft0;leftn;left2*size){intmidleftsize-1;intrightmin(left2*size-1,n-1);if(midn)break;if(midright)continue;vectorinta(arr.begin()left,arr.begin()mid1);vectorintb(arr.begin()mid1,arr.begin()right1);vectorintmergedmerge(a,b);copy(merged.begin(),merged.end(),arr.begin()left);}size*2;}returnarr;}// ---------------------- 性能测试工具 ----------------------vectorintgenerateTestData(intsize,conststringdataType){vectorintarr(size);iota(arr.begin(),arr.end(),0);// 生成0~size-1的有序数组mt19937rng(42);// 固定种子if(dataTyperandom){shuffle(arr.begin(),arr.end(),rng);}elseif(dataTypepartial_sorted){// 80%有序20%随机打乱for(inti0;isize/5;i){uniform_int_distributiondist(0,size-1);intidx1dist(rng);intidx2dist(rng);swap(arr[idx1],arr[idx2]);}}returnarr;}doubletestAlgorithm(conststringfuncName,functionvectorint(vectorint)func,constvectorintdata){autostarthigh_resolution_clock::now();func(data);autoendhigh_resolution_clock::now();durationdoubleelapsedend-start;coutleftsetw(20)funcName 耗时: fixedsetprecision(6)elapsed.count() 秒endl;returnelapsed.count();}// ---------------------- 执行测试 ----------------------intmain(){vectorintdataSizes{1000,10000,100000,1000000};vectorstringdataTypes{random,partial_sorted,sorted};vectorpairstring,functionvectorint(vectorint)algorithms{{快排变种,quickSortSimple},{Timsort,timsort}};for(intsize:dataSizes){cout\n 数据规模: size 元素 endl;for(conststringdtype:dataTypes){cout\n【dtype 数据】endl;vectorintdatagenerateTestData(size,dtype);for(autoalgo:algorithms){testAlgorithm(algo.first,algo.second,data);}}}return0;}测试说明环境一致性三种语言均使用固定随机种子42保证测试数据完全一致结果可复现数据场景覆盖真实场景中常见的三种数据类型避免单一数据导致的偏差耗时统计仅统计算法核心执行时间排除数据生成、打印等额外开销编译/运行建议Python直接运行需Python 3.7Go go run main.go 需Go 1.16C编译时启用优化 g -O2 test.cpp -o test 否则1M元素测试可能较慢。需要我帮你分析测试结果的预期趋势或针对某个语言的实现进行性能优化如减少拷贝、使用原地排序吗

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询