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;
}
#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++,只接触一点点,没有发言权。请大家理解。
只是个练习。。