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++,只接触一点点,没有发言权。请大家理解。
只是个练习。。
分享到:
相关推荐
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...
笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...
Java数据结构和算法介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解。全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...
2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...
2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...
几种简单排序之间的比较 小结 问题 实验 编程作业 第4章 栈和队列 不同的结构类型 栈 队列 优先级队列 解析算术表达式 小结 问题 实验 编程作业 第5章 链表 链结点(Link) LinkList专题Applet...
2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...