`
liu0107613
  • 浏览: 71530 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

简单的c++排序跟java的性能比较。仅仅学习。

阅读更多

c++的代码如下:(sort.cpp)

写道
#include <cstdlib>
#include <iostream>
#include "sort_util.h"
using namespace std;

int main(int argc, char *argv[])
{

time_t start,end;
int n=1,m=50000;
int DATA_LENGTH=0;
int algorithm=1;
while(true)
{
cout<<"please input array length :";
cin>>DATA_LENGTH;
cout<<"please select an algorithm :1:select 2 bubble 3 quick 0:quit ";
cin>>algorithm;
int* data=new int[DATA_LENGTH];
sortRandom(data,n,m,DATA_LENGTH);
//cout<<"source data is displayed as the below..........."<<endl;
//showData(data,DATA_LENGTH);

//cout<<"sorted data is displayed as the below..........."<<endl;
start = time(NULL);
if(algorithm==1)
SelectSort2(data,DATA_LENGTH);
if(algorithm==2)
bubbleSort(data,DATA_LENGTH);
if(algorithm==3)
quickSort(data,DATA_LENGTH);
end = time(NULL);

if(algorithm==0)
break;
cout<<endl;
cout<<"elapse time: "<<difftime(end,start)<<" seconds."<<endl;
bool result=sortIsCorrect(data,DATA_LENGTH);
if(result==true)
cout<<"sort algorithm is true"<<endl;
else
cout<<"sort algorithm is false"<<endl;
}


system("pause");
return EXIT_SUCCESS;
}

c++的代码如下:(sort_util.h)

#include <ostream>
#include <istream>
# ifndef LINE_NUMBER
# define LINE_NUMBER 10
# endif

//# ifndef DATA_LENGTH
//# define DATA_LENGTH 50000
//# endif



int* sort_random(int n,int m,int size);

void sortRandom(int* data,int n,int m,int size);

void SelectSort(int* p,int size);

void SelectSort2(int* p,int size);

void quickSort(int* data,int size);

void bubbleSort(int* data,int size);

void showData(int* p,int size);

bool sortIsCorrect(int* p,int size);

c++的代码如下:(sort_util.cpp)

#include "stdio.h"
#include <stdlib.h>
#include <iostream>
#include "windows.h"
#include <conio.h>
#include "sort_util.h"

using namespace std;


/**
funciton :
函数说明:用来产生随机数的函数。
**/

void sortRandom(int* data,int n,int m,int size){
int value=0;
srand((unsigned)GetCurrentTime()); //加了这个才正直随机, 头文件是windows.h
for(int i=0;i<size;i++)
{
value=rand()*(m-n)/RAND_MAX+n;
data[i]=value;
}
}




/**
funciton :
函数说明:升序排列数组,以选择法排序。
p 为数组的指针
size 为数组的长度
**/

void SelectSort(int* data,int size){
int i=0,j=0,temp=0;

for(i=0;i<size-1;i++)
{
for(j=i+1;j<size;j++)
{
//cout<<"data[j]=="<<data[j]<<endl;
if(data[i]>data[j])
{
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}
}

}


/**
funciton :
函数说明:升序排列数组,以选择法排序,减少交换数据的次数,找到每一趟搜索的最大值。
p 为数组的指针
算法的描述为:
将数组的第一值设定为最小,每次让其和其后面的值比较,知道data[n-1],找到最新的值对应的索引。
将data[min]和data[i]交换。依次进行i=1,2....n-2.
size 为数组的长度
**/

void SelectSort2(int* data,int size){
int i=0,j=0,temp=0,min=0;

for(i=0;i<size-1;i++)
{
min=i; //设定最大值,对应的索引值
for(j=i+1;j<size;j++)
{
//cout<<"data[j]=="<<data[j]<<endl;
if(data[j]<data[min])
{
min=j;

}
}
//将i和Max互换
temp=data[i];
data[i]=data[min];
data[min]=temp;
}
}




/**
funciton :
函数说明:升序排列数组,快速法排序具体实现程序
p 为数组的指针
算法的描述为:
**/
void quickSort_impl(int* data,int low,int high){
int i,j,privokey;
if (low<high){
privokey=data[low];i=low;j=high;
while(i<j) {
while(i<j&&data[j]>=privokey) j--;
if (i<j) data[i++]=data[j];
while(i<j&&data[i]<=privokey) i++;
if(i<j) data[j--]=data[i];
}
data[i]=privokey;
quickSort_impl(data,low,i-1);
quickSort_impl(data,i+1,high);
}
}

/**
funciton :
函数说明:升序排列数组,快速法排序
p 为数组的指针
算法的描述为:
**/
void quickSort(int* data,int size){

quickSort_impl(data, 0, size - 1);

}
/**
funciton :
函数说明:升序排列数组,以冒泡法排序,减少交换数据的次数,找到每一趟搜索的最大值。
p 为数组的指针
算法的描述为:
**/

void bubbleSort(int* data,int size){
int i=0,j=0,temp=0;
bool exchange;
for(i=0;i<size;i++) //设定执行的次数
{
exchange=false;//每趟排序前设定 交换标志
for(j=0;j<size-i-1;j++)
{
if(data[j]>data[j+1])
{
//将j和j+1互换
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
exchange=true;
}
}
if(!exchange) //本趟排序未发生交换,提前终止算法
return;
} //end for i
}


/**
funciton :
函数说明:将生成的数组的值打印到屏幕上。
p 为数组的指针
size 为数组的长度
**/

void showData(int* p,int size){
int i=0;
//cout<<"showData p="<<p<<endl;
for(i=0;i<size;i++)
{
printf("%6d ",p[i]);
if(i!=0 && (i+1)%LINE_NUMBER==0) cout<<endl;
}
//cout<<"showData p="<<p<<endl;
cout<<endl;
}

/**
funciton :
函数说明:判断拍完序的数组是否是升序排列。
p 为数组的指针
size 为数组的长度
**/


bool sortIsCorrect(int* p,int size){

int i=0;
while(i<size-1)
{
if(p[i]>p[i+1]) return false;
i++;
}
return true;
}

 

 

运行结果:

please input array length  :50000
please select an algorithm :1:select 2 bubble 3 quick 0:quit 1

elapse time: 7 seconds.
sort algorithm is true
please input array length  :50000
please select an algorithm :1:select 2 bubble 3 quick 0:quit 2

elapse time: 21 seconds.
sort algorithm is true
please input array length  :50000
please select an algorithm :1:select 2 bubble 3 quick 0:quit 3

elapse time: 0 seconds.
sort algorithm is true

 

 

本人对c++,只接触一点点,没有发言权。请大家理解。

只是个练习。。

分享到:
评论
1 楼 rmn190 2009-12-15  
结果中哪一个是C++的,哪一个Java的呢? 楼主最好用一个table总结下下吧

相关推荐

    JAVA上百实例源码以及开源项目源代码

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...

    JAVA上百实例源码以及开源项目

    笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...

    Java数据结构和算法中文第二版

    Java数据结构和算法介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解。全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、...

    java开源包11

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包6

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包9

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包4

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包101

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包5

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包8

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包10

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包3

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包1

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java 编程入门思考

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    Java初学者入门教学

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    java联想(中文)

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    Java数据结构和算法中文第二版(1)

    几种简单排序之间的比较 小结 问题 实验 编程作业 第4章 栈和队列 不同的结构类型 栈 队列 优先级队列 解析算术表达式 小结 问题 实验 编程作业 第5章 链表 链结点(Link) LinkList专题Applet...

    JAVA_Thinking in Java

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    java开源包2

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

Global site tag (gtag.js) - Google Analytics