资源描述:
《十六种经典排序算法.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、//头文件定义#include"stdafx.h"#include#include#include#include#includevoidbubbleSort(int*a,intlen);//冒泡算法voidUpdBubbleSort1(int*a,intlen);//改进冒泡算法1----找到一次循环的已排好序位置voidUpdbubbleSort2(int*a,intlen);//改进冒泡算法2--一次循环找到最大最小值voi
2、dquickSort_update(int*a,intlen,intk);//改进快速排序--先使>8的块基本有序--实测比一般快速排序节约28%时间(59秒,1亿条随机数据,逆序数时间较长)voidqsort_improve(int*a,intlow,inthigh,intk);//改进快速排序子算法voidInsertSort(int*a,intn);//直接插入排序voidshellSort(int*a,intn);//直接插入排序威力加强版本--希尔排序(适用逆序数,1亿逆序数据93s1亿随机数据223s)voidShe
3、llSort_local(int*a,intlen,intdk);voidHeapSort(int*H,intlength);//堆排序-step1:建堆2:n/2个父节点堆有序3、从堆尾元素依次和堆顶交换voidBuildingHeap(int*H,intlength);//堆排序---子函数(逆序数据50s,1亿条随机数据133秒)voidHeapAdjust(int*H,ints,intlength);//堆排序---子函数unsignedlongulrand(void);//产生大的随机数voidselectSort(i
4、nt*a,intn);//选择排序intSelectMinKey(int*a,intn,inti);voidSelectSort_double(int*r,intn);typedefintElemType;voidMergeSort(ElemType*r,ElemType*rf,intlenght);//归并排序(1亿逆序:30s1亿随机:46s)voidMerge(ElemType*r,ElemType*rf,inti,intm,intn);//65148-65149/*总结提升算法效率方法1、减小循环次数,大循环在里面,小循
5、环再外面-----循环次数多的话切换用时多,2、侦测已完成任务,提前结束3、递归算法占用的空间较大,容易溢出,优点是算法复杂度低*/voidQuickSort(int*a,intlow,inthigh);//(全完逆序100w数据40分钟---已验证)intLocalQuickSort(int*a,intlow,inthigh);voidSwap(int*p1,int*p2);voidPrintArray(int*a,intlen);voidInitArray(int*a,intlen);intfirst_posi=0;intp
6、rivotKey=0;intSortOkSign=0;//无//需交换的标志#definelenArrintlastChangePos=lenArr-1;//最后一次交换的位置intgloData=0;intk=0,m=0,n=0,x=0;int*p=(int*)malloc(lenArr*sizeof(int));intb[lenArr];intmain(){//intlen=5;if(p==NULL){printf("mallocError");return0;}clock_tstart_2,end_2;//InitArra
7、y(p,lenArr);//start_1=clock();//开始时间start_1,end_1,//InsertSort(p,lenArr);//UpdbubbleSort2(p,lenArr);//QuickSort(p,0,lenArr-1);//PrintArray(p,lenArr);//quickSort_update(p,lenArr-1,10);//InsertSort(p,lenArr);//HeapSort(p,lenArr);//MergeSort(p,b,lenArr);//end_1=clock();
8、//结束时间InitArray(p,lenArr);//PrintArray(p,lenArr);start_2=clock();//结束时间//shellSort(p,lenArr);//bubbleSort(p,lenArr);HeapSort(p,lenA