浏览 2394 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-11
最后修改:2010-03-23
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 elapse time: 7 seconds. elapse time: 21 seconds. elapse time: 0 seconds.
本人对c++,只接触一点点,没有发言权。请大家理解。 只是个练习。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-15
结果中哪一个是C++的,哪一个Java的呢? 楼主最好用一个table总结下下吧
|
|
返回顶楼 | |