三种sort方法及比较
来源:互联网 发布:数据置乱 编辑:程序博客网 时间:2024/06/06 04:52
在三种排序中,理论上复杂度为O(N*logN)
在实现过程中,heapsort也许因为代码的原因,较其他两种慢很多
heapsort:
#include<iostream>
#include <time.h>
#include<stdio.h>
#include <stdlib.h>
using namespace std;
int a[10001];
int length=10;
void max_heapify(int a[],int i)
{
int l,r,largest,t;
l=2*(i+1)-1;
r=2*(i+1);
if(l<=length&&a[l]>a[i])
largest=l;
else
largest=i;
if(r<=length&&a[r]>a[largest])
largest=r;
if(largest!=i)
{
t=a[i];
a[i]=a[largest];
a[largest]=t;
}
}
void build_max_heap(int a[])
{
int i;
for(i=length/2-1;i>=0;i--)
{
max_heapify(a,i);
}
}
void heapsort(int a[])
{
int i,t;
build_max_heap(a);
for(i=length;i>=1;i--)
{
t=a[0];
a[0]=a[i];
a[i]=t;
length--;
build_max_heap(a);
}
}
void heap_insert(int a[],int i,int key)//还不能实现
{
if(key<a[i])
cout<<"Error"<<endl;
else
{
a[i]=key;
}
heapsort(a);
}
int main()
{
int i,b;
clock_t start = clock();
srand((unsigned)time(NULL));
for(i=0;i<=10;i++)
a[i]=rand()%10000+1;
i=0;
heapsort(a);
clock_t end = clock();
for(i=0;i<=10;i++)
cout<<a[i]<<" ";
cout<<endl;
printf("\nHeapsort Total time used: %.1f ms:\n",(double)(end - start));
return 0;
}
mergesort :
#include<iostream>
#include <time.h>
#include<stdio.h>
#include <stdlib.h>
using namespace std;
#define max 99999999
int l[5001];
int m[5001];
int a[10001];
void merge(int a[],int p,int q,int r)
{
int n1,n2,i,j,k;
n1=q-p+1;
n2=r-q;
for(i=0;i<n1;i++)
l[i]=a[p+i];
for(j=0;j<n2;j++)
m[j]=a[q+1+j];
l[n1]=max;
m[n2]=max;
i=0;j=0;
for(k=p;k<=r;k++)
{
if(l[i]<=m[j])
{
a[k]=l[i];
i++;
}
else
{
a[k]=m[j];
j++;
}
}
}
void mergesort(int a[],int p,int r)
{
int q;
if(p<r)
{
q=(p+r)/2;
mergesort(a,p,q);
mergesort(a,q+1,r);
merge(a,p,q,r);
}
}
int main()
{
int i,b;
clock_t start = clock();
srand((unsigned)time(NULL));
for(i=0;i<=10;i++)
a[i]=rand()%10000+1;
i=0;
mergesort(a,0,10);
clock_t end = clock();
for(i=0;i<=10;i++)
cout<<a[i]<<" ";
cout<<endl;
printf("\nMergesort Total time used: %.1f ms:\n",(double)(end - start));
return 0;
}
quicksort:
#include<iostream>
#include <time.h>
#include<stdio.h>
#include <stdlib.h>
using namespace std;
int a[10001];
int partition(int a[],int p,int r)
{
int x,i;
x=a[r];
i=p-1;
int j,t;
for(j=p;j<r;j++)
{
if(a[j]<=x)
{
i=i+1;
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
t=a[i+1];
a[i+1]=a[r];
a[r]=t;
return i+1;
}
void quicksort(int a[],int p,int r)
{
int q;
if(p<r)
{
q=partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
int main()
{
int i,b;
clock_t start = clock();
srand((unsigned)time(NULL));
for(i=0;i<=10;i++)
a[i]=rand()%10000+1;
i=0;
quicksort(a,0,10);
clock_t end = clock();
for(i=0;i<=10;i++)
cout<<a[i]<<" ";
cout<<endl;
printf("\nQuicksort Total time used: %.1f ms:\n",(double)(end - start));
}
//partition的复杂度为n;sort的复杂度最差为n^2,期望复杂度为n*logN;
- 三种sort方法及比较
- Java创建线程的三种方法比较及用法
- C# List Sort的三种方法
- 视图实现圆角效果的三种方法及比较
- 视图实现圆角效果的三种方法及比较
- ios view实现圆角效果的三种方法及比较
- 视图实现圆角效果的三种方法及比较
- Android / Java中 UI 监听器 listener 实现的三种方法及比较
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法
- 视图实现圆角效果的三种方法及比较
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法
- 视图实现圆角效果的三种方法及比较
- 视图实现圆角效果的三种方法及比较
- iOS 视图实现圆角效果的三种方法及比较
- 三种去除ASCII字符串中重复字符的方法及耗时比较
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法
- java三种排序(冒泡,选择,方法sort)
- Centos安装Zabbix
- 配置CGAL
- [TroubleShooting] The remote copy of database xx has not been rolled forward to a point in time
- 硬盘安装Fedora20过程记录
- HDU 1279 验证角谷猜想
- 三种sort方法及比较
- Hadoop(HDFS、YARN、HBase、Hive和Spark等)默认端口表
- Struts2 Tomcat class.classLoader.resources.dirContext.docBase赋值造成的DoS及远程代码执行利用!
- 优化的NSLog技巧
- 手游产品经理初探(一)logo的印象推广很重要
- 用NSSetUncaughtExceptionHandler捕获程序异常
- maven 建立本地仓库
- Hadoop-2.4.0分布式安装手册
- 判断是不是同一天,同一周