1:全排列函数
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int ans=0;
void swap(char &a,char &b)
{
char temp;
temp=a;
a=b;
b=temp;
}
int cherk(char *s,int k,int i)
{
if(k<i)
{
for(int t=k;t<i;t++)
{
if(s[t]==s[i]) return 0;
}
}
return 1;
}
void array(char*s,int k,int n)
{
if(k==n)
{
ans++;
for(int i=0;i<n;i++)
cout<<s[i];
cout<<endl;
}
else
{
for(int i=k;i<n;i++)
{
if(cherk(s,k,i))
{
swap(s[k],s[i]);
array(s,k+1,n);
swap(s[k],s[i]);
}
}
}
}
int main()
{
int n;
cin>>n;
getchar();
char s[2*n];
gets(s);
array(s,0,n);
cout<<ans;
return 0;
}
2:二分查找
#include<iostream>
using namespace std;
int BinarySearch(int *a,int x,int n)
{
int left=0,right=n-1;
while(left<=right)
{
int middle=(left+right)/2;
if(x==a[middle])
{
printf("i:%d j:%d",middle,middle);
return 1;
}
if(x>a[middle])
{
left=middle+1;
}
else
{
right=middle-1;
}
}
printf("i:%d j:%d",right,left);
return 0;
}
int main()
{
int n,x,i;
scanf("%d%d",&n,&x);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
BinarySearch(a,x,n);
return 0;
}
3:多次最优服务次序问题
#include<stdio.h>
#include<algorithm>
#define n 10
#define s 2
using namespace std;
double fun2(int *list)
{ //多次最优服务次序问题
int i,sum=0;
int *temp = new int[s];
for(i=0;i<s;i++)
{
temp[i]=0;
}
for(i=0;i<n;i++)
{
temp[i%s]+=list[i];
sum += temp[i%s];
}
return sum/(n*1.0);
}
int main(){
int i;
int list[n]={56,12,1,99,1000,234,33,55,99,812};
sort(list,list+n);
printf("\n%.0f",fun2(list));
return 0;
}
4:快速查找算法
#include<iostream>
#include<algorithm>
using namespace std;
void swap (int &n,int &m)
{
int temp;
temp=n;
n=m;
m=temp;
}
int partition(int *a,int p,int r)
{
int i=p,j=r+1;//小心
int x=a[p];
while(true)
{
while(a[++i]<x&&i<r);
while(a[--j]>x);
if(i>=j)
break;
swap(a[i],a[j]);
}
a[p]=a[j];
a[j]=x;
return j;
}
void quike_sort(int *a,int p,int r)
{
if(p<r)
{
int q=partition(a,p,r);
quike_sort(a,p,q-1);
quike_sort(a,q+1,r);
}
}
int main()
{
int n;
cin>>n;
int a[n];
for(int i=1;i<=n;i++)//注意是1到n
cin>>a[i];
quike_sort(a,1,n);
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}