C ++编写一个使用类模板对数组进行排序、查找和求元素和的程序。

C ++编写一个使用类模板对数组进行排序、查找和求元素和的程序。,第1张

写的我好累,分给我吧

#include<iostreamh>

#include<iomaniph>

template <class T>

class Array

{

T set;

int n;

public:

Array(T data,int i){set=data;n=i;}

~Array(){}

void sort(); // 排序

int seek(T key); // 查找指定的元素

T sum(); // 求和

void disp(); // 显示所有的元素

};

template<class T>

void Array<T>::sort()

{

int i,j;

T temp;

for(i=1;i<n;i++)

for(j=n-1;j>=i;j--)

if(set[j-1]>set[j])

{

temp=set[j-1];set[j-1]=set[j];set[j]=temp;

}

}

template <class T>

int Array<T>::seek(T key)

{

int i;

for(i=0;i<n;i++)

if(set==key)

return i;

return -1;

}

template<class T>

T Array<T>::sum()

{

T s=0;int i;

for(i=0;i<n;i++)

s+=set;

return s;

}

template<class T>

void Array<T>::disp()

{

int i;

for(i=0;i<n;i++)

cout<<set<< ;

cout<<endl;

}

void main()

{

int a[]={6,3,8,1,9,4,7,5,2};

double b[]={23,61,15,84,67,38};

Array<int>arr1(a,9);

Array<double>arr2(b,6);

cout<< arr1:<<endl;

cout<< 原序列:; arr1disp();

cout<< 8在arr1中的位置:<<arr1seek(8)<<endl;

arr1sort();

cout<< 排序后:; arr1disp();

cout<<arr2:<<endl;

cout<< 原序列:; arr2disp();

cout<< 84在arr2中的位置:<<arr2seek(84)<<endl;

arr2sort();

cout<< 排序后:; arr2disp();

}

#include<stdioh>

#include<stdlibh>

#define Size 50

//定义顺序表结构体类型

typedef struct Table{

inthead;//顺序表头指针,为整型

int length;//顺序表中元素个数

int size; //顺序表的长度

}Table;

//创建顺序表

Table CreateTable(){

Table T;

if(!(Thead=(int)malloc(Sizesizeof(int)))){

printf("内存分配错误!\n");

exit(0);

}

Tsize=Size;

Tlength=0;

return T;

}

//增加

void Insert(Table T,int set,int values)//set为插入的位置,values为值

{

//首先判断插入位置是否正确

if(set<0||set>Tlength){

printf("插入位置不正确!\n");

reutrn;

}

//判断是否有足够的内存空间存储增加的数

if(Tlength==Tsize){

if(!(Thead=(int)realloc(Thead,(Tsize+10)sizeof(int)))){

printf("内存分配错误!\n");

exit(0);

}

Tsize+=10;

}

//插入数据

for(int i=slength;i>set;i--)

Thead[i]=Thead[i-1];

Thead[set]=values;

Tlength++;

}

//删除

void Delete(Tabel T,int set)

{

if(set<0||set>=Tlength)

{

printf("删除数的位置不争确,删除失败!\n");

return;

}

//输出数据

for(int i=set;i<slength;i++)

Thead[i]=Thead[i+1];

Tlength--;

}

//查找

int Search(Tabel T,int value)

{

for(int i=0;i<Tlength;i++)

if(Thead[i]==value)

return i;

return -1;

}

有问题的话自己改一下,没调试。

二分查找:

int search(int a[],int x,int n)

{

int mid=0;

int low=0;

int high=n;

while(low<=high)

{

mid=(low+high)/2;

if(a[mid]==x)

{ return mid; }

else if(x<a[mid])

{ high=mid-1; }

else

{ low=high+1; }

}

return -1;

}

顺序查找:

int search(int a[],int x,int n)

{

int i;

for(i=0;i<n;i++)

{

if(a[i]==x)

return i;

else

return -1;

}

}

我认为第一空应在scanf上面

应该是提示语句如printf("please

input

the

number

you

want

to

search\n");

第二空应为

i>=9;

由于数组元素只有九个所以要判断的是i>=9

就是说第十个即使是跟所找的数字相等

也不算找到

应为由题意

根本不知a[10]为多少

1)利用readData()函数从data1txt中读入不同规模的数据存入数组,

编写基于数组的顺序查找算法,测试数据量为1万、5万、10万、20万、

30万、40万和50万时的数据查询时间。

算法代码如下:

1 int seqsearch(int a[],int n,int key)

2 {

3 int k=n-1;

4 while(k>=0&&a[k]!=key)

5 k--;

6 return (k);

7 }

2)利用readData()函数从data2txt中读入不同规模的有序数据存入数组,

编写基于数组的二分查找算法,测试数据量为1万、5万、10万、20万、30万、

40万和50万时的数据查询时间。

算法代码如下:

1 int binSearch(int a[],int n,int key)

2 {

3 int low=0;

4 int high=n-1;

5 int mid;

6 while(low<=high)

7 {

8 mid=(low+high)/2;

9 if(a[mid]==key) return mid;

10 if(a[mid]>key)

11 high=mid-1;

12 else

13 low=mid+1;

14 }

15 return -1;

16 }

3)请设计冒泡排序算法函数void bubbleSort(int a[],int n),对a[1]a[n]进行升序排序。

并测试在不同数据规模下的排序效率。

算法代码如下:

1 void bubbleSort(int a[],int n)

2 {

3 int i=1,j,flag=1;

4 while(i<=n-1&&flag)

5 {

6 flag=0;

7 for(j=1;j<=n-1-i;j++)

8 if(a[j+1]<a[j])

9 {

10 a[0]=a[j];

11 a[j]=a[j+1];

12 a[j+1]=a[0];

13 flag=1;

14 }

15 i++;

16 }

17 }

int IdxSerch(SeqList A[],IdxType index[],int b,KeyType k,int n) {

//分块查找关键字为k的记录,索引表为

index[0b-1]

int low=0,high=b-1,mid,i;

int s=n/b; //每块记录个数

while(low<=high)

{

//在索引表中进行二分查找,找到的位置放在low中

mid=(low+high)/2;

if(index[mid]key<k) low=mid+1;

else high=mid-1;

}

if(low<b)

{

//在顺序表中顺序查找

for(i=index[low]link;i<=index[low]link+s-1 && i<n;i++)

if(A[i]key==k) return i;

return -1;

}

return -1;

}

typedef struct node

{

KeyType key;

//结点中的关键字

struct node lchild,rchild; //左、右孩子指针

}BsTree;

BsTree BstSeareh(BsTree BST,KeyType k ,BsTree parent)

{

BsTree p=BST,q=NULL; //p指向根结点,q指向p的双亲

while(p!=NULL)

{

if(k==p->key)

{ //查找成功

parent=q;

return (p);

}

q=p;

if(k<p->key) p=p->lchild;

//在左子树中查找

else p=p->rchild; //在右子树中查找

}

parent=q;

return (p);

//查找失败,返回空

}

以上就是关于C ++编写一个使用类模板对数组进行排序、查找和求元素和的程序。全部的内容,包括:C ++编写一个使用类模板对数组进行排序、查找和求元素和的程序。、C语言编写一个顺序表程序,要求:完成创建、增加、删除、查找。、如何编写二分查找和顺序查找的C语言代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10217216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存