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++,只接触一点点,没有发言权。请大家理解。
只是个练习。。
分享到:
相关推荐
C、C++和Java都可实现,但Java的Arrays类提供了内置的排序函数。 - **查找算法**:二分查找、哈希查找等,C++的lower_bound/upper_bound和Java的BinarySearch方法。 - **图算法**:如Dijkstra最短路径算法、Floyd-...
这些算法根据不同的工作原理和性能特点被广泛应用于各种编程语言,如C++、Java和Python。 【快速排序】是一种高效的比较类排序算法,由C.A.R. Hoare在1960年提出。它的基本思想是采用分治法,通过选取一个基准值并...
《Java与C++学习经典笔记》是一份宝贵的资源,它涵盖了两种编程语言的关键知识点,旨在为初学者提供全面的学习指导。这份笔记结合了作者的培训经验,深入浅出地讲解了Java和C++的核心概念,旨在帮助初学者快速建立起...
学习C语言版可以帮助理解基本概念,C++版能深化对面向对象设计的理解,而Java版则适合那些在企业级应用开发中使用Java的人。无论选择哪一本,都能帮助读者深入掌握数据结构及其在实际问题中的应用,这对于提升编程...
本资源提供了C、C++、Java三种语言实现的基础数据结构和算法,涵盖了线性表、链表、队列、二叉树、图、查找和排序等多个核心概念。 1. **线性表**:线性表是最基本的数据结构之一,它包含一组逻辑上相邻的元素,...
这些文件涵盖了计算机科学和技术的多个重要领域,包括编程语言(如C++和Java)、计算机组成原理、计算机网络以及算法设计与分析。以下是这些文件中所包含的知识点的详细概述: 1. **C++**: `C++Primer(第4版)习题...
本资源提供了二叉树在C、C++和JAVA三种编程语言中的实现源码,便于开发者理解和学习如何在实际编程中应用二叉树。 在C语言中,二叉树的实现通常涉及到指针的操作和内存管理。首先,我们需要定义一个二叉树节点...
标题和描述中并未提供足够的...JAVA和C++的比较不仅仅局限于上述几个方面,实际上,它们之间的差异还体现在许多其他细微的语法和运行机制上。在具体应用开发时,需要根据实际需求和项目特点来选择最合适的编程语言。
在华为的面试和笔试过程中,C++和Java作为两种重要的编程语言,经常被用来测试候选人的技术能力。这里,我们将深入探讨这两个领域的关键知识点,帮助你准备华为的技术面试。 一、C++知识点 1. **面向对象编程**:...
这些排序算法在C++和Java中都有实现,性能和适用场景各不相同。 2. 搜索算法:如线性搜索、二分搜索、深度优先搜索(DFS)、广度优先搜索(BFS)等,对数据结构的理解直接影响搜索效率。 3. 图算法:如Dijkstra最短...
Java和C++是两种广泛应用的编程语言,它们在软件开发、系统编程以及游戏开发等领域有着广泛的应用。在求职过程中,尤其是对于技术岗位,面试官常常会通过笔试和面试来评估应聘者的编程技能和理解能力。这份"Java&C++...
在IT行业的招聘过程中,Java和C++作为两种广泛使用的编程语言,经常出现在笔试和面试的考核中。这份“Java/c++笔试面试题大全”显然是一份全面的复习资源,涵盖了多个核心领域,包括编程语言本身、数据库管理、数据...
在软件开发领域,C++和Java是两种广泛使用的编程语言,尤其在企业级应用和系统级编程中。软件测试则是确保这些程序质量的关键环节。...通过学习和解答这些题目,可以提升对C++、Java和软件测试的理解,增强面试竞争力。
在IT行业中,排序方法的效率比较和飞机订票系统的实现是两个重要的主题,尤其是在C++编程和Web开发领域。在这个个人项目中,我们将深入探讨这两个知识点,并结合C++语言来研究不同排序算法的性能,同时也会讨论构建...
在IT行业的面试中,C++和Java作为两种广泛使用的编程语言,经常出现在笔试和面试的题目中。这两种语言各有特点,适用于不同的应用场景。本篇文章将深入探讨C++和Java的面试知识点,帮助求职者做好充分准备。 对于...
此外,还会涉及渐进分析和最坏、平均、最佳情况下的性能比较。 在实现部分,C、C++和Java三种语言的结合使得算法的描述更加直观和实用。C语言的简洁和底层特性适合理解算法的底层逻辑;C++的面向对象特性则方便构造...
根据提供的标题、描述以及部分上下文内容,我们可以推断出这些文字可能涉及的是与C++或Java编程语言相关的数据结构等内容。尽管原文内容杂乱无章且包含大量非标准字符和难以理解的部分,但我们可以尝试从中提取一些...
Java学习教案是为初学者设计的一套全面教程,旨在帮助那些已有C或C++编程基础的人快速掌握Java语言。这份教程包含丰富的学习材料,不仅有详细的源代码示例,还配有精心制作的幻灯片,使得理论与实践相结合,使学习...
本篇将针对标题和描述中提及的C++、Java以及数据库这三大知识点进行深入探讨。 首先,C++是一种强大的、面向对象的编程语言,它在系统软件、游戏开发、服务器端编程等领域有着广泛的应用。C++笔试题目可能涉及到类...
【Java知识点】 Java是一种广泛应用的面向对象的编程语言,以其跨平台、安全性强、性能高效等特点...通过深入学习和解答这些题目,可以提升对Java、C、C++编程语言的理解,以及数据库的相关技能,为面试做好充分准备。