c++算法学习笔记 之------- 冒泡法,二分法

来源:互联网 发布:消除红眼软件 编辑:程序博客网 时间:2024/05/29 10:26

第一:二分法
    将一个排好序列的数组,不断分成两半,然后再可能包含我们所要查找的值的那一部分中搜索。
    缺点:
     1.如果数据里面有两个或两个以上的相同元素,那么二分法就会不确定返回数组的那个值
(下标)。
     2.要求数组必须是有序的,要么从小到大,要么从大到小。

检测数组是否按照顺序排列:
#include<iostream>
using namespace std;
bool add(int a[], int m);
int main()
{
    int a[]={12,23,34,51,3,4,5};
    cout<<"数组前4个元素按照顺序排列,为1则是,为0则否。····"<<add(a,4)<<endl;
 cout<<"数组前7个元素按照顺序排列,为1则是,为0则否。·······"<<add(a,7)<<endl;
return 0;
}

bool add(int a[], int m)
{
  
 for(int i=1;i<m;i++)
      if (a[i]<a[i-1])   //如果改成if (a[i]>a[i+1]) ,会出错, 因为最后一个i=m-1.  m=i+1,a[i+1]==a[m];造成数组越界...

        return false;
        return  true;

}

 

比如1:
#include<iostream>
using namespace std;
int find(int m, int[], int n);
void main()
{
 int a[]={1,2,3,5,6,7,8,9,10,11};
 cout<<"1在数组a中的位置是:"<<find(1,a,11)<<endl;
 cout<<"3在数组a中的位置是:"<<find(3,a,11)<<endl;
}

int find(int m, int a[], int n )
{
 int o=0,h=n-1,i;
 while(o<=h)
 {
      i=(o+h)/2;
  if (a[i]==m)
  {
   return i;
  }
  if (a[i]<m)
  {
   o=i+1;
  }
  else
   h=i-1;
 }
 return n;
}

比如2:
#include<iostream>
using namespace std;
int find(int m, int[], int n);
void main()
{
 int a[]={1,2,3,5,6,7,8,9,10,11};
 int check=find(5,a,10);
 cout<<check<<endl;
  if (check==2)
  {
     cout<<"find zhe number !!"<<endl;
  }

  else
  cout<<"2在数组a中的位置是:"<<check<<endl;
}

int find(int m, int a[], int n )
{
 int o=0,h=n-1,i;
 while(o<=h)
 {
      i=(o+h)/2;
  if (a[i]==m)
  {
   return i;
  }
  if (a[i]<m)
  {
   o=i+1;
  }
  else
   h=i-1;
 }
 return n;
}


二:冒泡法:
把特定输入的数按照从大到校的顺序排列:
分析:
4 3 2 1
第一回(j=1):3 4 2 1       3  2  4  1    3 2 1 4      排列3次(i=4-j=3)
第二回(j=2):2 3 1 4       2  1  3  4                 排列2次 (i=4-j=2)
第三回(j=3):1 2 3 4                                  排列1次  (i=4-j=1)
for(j=0;j<3;j++)
   for(i=0;i<4-j;i++)
{

 

}
#include<iostream>
using namespace std;
int main()
{
 int a[10];
 int i,j,t;
 cout<<"请输入10个数字:"<<endl;
 for (i=0;i<10;i++)
 cin>>a[i];

 for(j=0;j<9;j++)
  for (i=0;i<10-j-1;i++)

     if (a[i]>a[i+1])
     {
         t=a[i];
      a[i]=a[i+1];
      a[i+1]=t;

     }
  
   cout<<"输出这十个数:"<<endl;
 for (i=0;i<10;i++)
 {
    cout<<a[i];
 }
return 0;

}

原创粉丝点击