sp; return *this
}
delete [] m_str; //否则,先释放当前对象堆内存
m_str = new char[strlen(other.m_str)+1]; //分配空间容纳str内容
strcpy(m_str, other.m_str); //复制other.m_str到私有成员m_str中
return *this;
}
编写一个二分查找的功能函数
int BSearch(elemtype a[],elemtype x,int low,int high)
/*在下届为low,上界为high的数组a中折半查找数据元素x*/
{
int mid;
if(low>high)
return -1;
mid=(low+high)/2;
if(x==a[mid])
return mid;
if(x<a[mid])
return(BSearch(a,x,low,mid-1));
else
return(BSearch(a,x,mid+1,high));
}
2) 非递归方法实现:
int BSearch(elemtype a[],keytype key,int n)
{
int low,high,mid;
low=0;high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid].key==key)
return mid;
else if(a[mid].key<key)
low=mid+1;
else
high=mid-1;
}
return -1;
}
字符串逆序
方法一
#include <stdio.h>
#include <string.h>
void main()
{
char str[]=”hello,world”;
int len=strlen(str);
char t;
int i;
for(i=0; i<len/2; i++)
{
t=str[i];
str[i]=str[len-i-1];
str[len-i-1]=t;
}
printf(“%s\n”,str);
return 0;
}
方法二
#include <stdio.h>
int main(){
char* src = “hello,world”;
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要为\0分配一个空间
char* d = dest;
char* s = &src[len-1];//指向最后一个字符
while( len– != 0 )
*d++=*s–;
*d = 0;//尾部要加\0
printf(“%s\n”,dest);
free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
return 0;
}
排序
冒泡排序
void bubble_sort(int a[],int n)
{
int i,j;
for(i=0;i<n-1;i++)
{
bool x=ture;
for(j=0;j<n-1-i;j++)
{
int temp;
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
x=false;
}
}
if(x) break;
}
}
时间复杂度O(N^2)
选择排序
void select_sort(int a[],int n)
{
int i,j;
for(i=0;i<n-1;i++)
{
int min=i;
for(j=i+1;j<n;j++)
{
if(a[j]<a[min])
min=j;
if(min!=i)
{
int temp=a[j];
a[j]=a[min];
a[min]=temp;
}
}
}
}
时间复杂度O(N^2)
插入排序
void insert_sort(int a[],int n)
{
int i,j;
for(i=1;i<n;i++)
{
int x=a[i];
for(j=i;j>0&&x<a[j-1];j–)
a[j]=a[j-1];
a[j]=x;
}
}
时间复杂度O(N^2)
快速排序
void quick_sort(int a[],int ileft,int iright)
{
int iPivot=(left+right)/2;
int nPivot=a[iPivot];
for(int i=ileft,j=iright;i<j;)
{
while(!(i>=iPivot||nPivot<a[i]))
i++;
if(i<iPivot)
{
a[iPivot]=a[i];
iPivot=i;
}
while(!(j<=iPivot||nPivot>a[j]))
j–;
if(j>iPivot)
{
a[