论坛首页 编程语言技术论坛

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

浏览 2394 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-11   最后修改:2010-03-23
C++

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++,只接触一点点,没有发言权。请大家理解。

只是个练习。。

   发表时间:2009-12-15  
结果中哪一个是C++的,哪一个Java的呢? 楼主最好用一个table总结下下吧
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics