一 .递归
递归的两个特点
1.调用自身
2.结束条件
汉诺塔问题
二.查找
顺序查找()
二分查找(前提是有序性)
基础1 数组无重复
int binseach (int *arr,int n,int key)
{
int left=0,right=n-1;
int mid=0;
while(left+1<right)
{
int mid = (left + right) / 2;
if (arr[mid] <key)
{
left = mid;
} else
right = mid;
}
if(arr[right]==key)return right;
if(arr[left]==key)return left;
return -1;
}
如果序列存在重复key,返回key的最大下标
核心修改代码
if (arr[mid] <=key)
{
left = mid;
} else
right = mid;
返回大于key值的最小下标
int binseach (int *arr,int n,int key)
{
int left=0,right=n-1;
int mid=0;
while(left+1<right)
{
int mid = (left + right) / 2;
if (arr[mid] <=key)
{
left = mid;
} else
right = mid;
}
if(arr[right]>key)return right;
if(arr[left]>key)return left;
return -1;
}
返回小于key的最大下标
int binseach (int *arr,int n,int key)
{
int left=0,right=n-1;
int mid=0;
while(left+1<right)
{
int mid = (left + right) / 2;
if (arr[mid] <key)
{
left = mid;
} else
right = mid;
}
if(arr[right]<key)return right;
if(arr[left]<key)return left;
return -1;
}
排序
1插排(摸牌的过程)
void Insertsort(int *arr,int n)
{
for(int i=0 ;i<n-1;++i)
{
int end=i;
int temp=arr[end+1]
while(end>=0) /// 在挪动整个数组
{
if(arr[end]>temp)
{
arr[end+1]=arr[end];
end--;
}
else
break;
}
arr[end+1]=temp
}
希尔排序
1.先进行预排序
2,直接插入排序
void shellsort(int *arr,int n)
{
int gap=n;
while(gap
>1)
{
gap/=2;
for(int i=0;i<n-gap;++i)
{
int end=i;
int temp=arr[end+gap];
while(end>=0)
{
if(arr[end]>temp)
{
arr[end+gap]=arr[end];
end-=gap;
}
else
break;
}
arr[end+gap]=temp;
}
}
}
直接选择排序
void select(int arr[],int n)
{
int begin=0,end=n-1;
while(begin<end)
{ int mini=begin,maxi=begin;
for(int i=begin ;i<=end ;++i)
{
if(arr[i]<arr[mini])
mini=i;
if(arr[i]>arr[maxi])
maxi=i;
}
swap(&arr[begin],&arr[mini]);
if(begin==maxi)
{
maxi=mini;
}
swap(&arr[maxi],&arr[end]);
begin++;
end--;
}
}
冒泡
单词 翻转但不乱叙
空格串+非空+空+非空。。。。
void sort1(char arr[],int a)
{int i,j,k;
while ( 1 )
{
while(i<a&&arr[i]==' ')
{
i++;
}
if(i>=a) break;
j=i;
while(j<a&&arr[j]!=' ')
{
j++;
}
for(k=j-1;k>=i;k--,i++)
{ char c=0;
c=arr[i];
arr[i]=arr[k];
arr[k]=c;
}
i=j;
}
}
int main()
{
char arr[100] = {0};
gets(arr);
int i,j,k;
k=strlen(arr);
sort1(arr,k);
for(int h=k-1
;h>=0;h--)
{
printf("%c",arr[h]);
}
printf("\n");
}