您的位置:首页 > 编程语言 > C语言/C++

c++ 实现快速排序与二分查找 源代码

2014-03-31 16:33 369 查看
今天闲来无事,写写快速排序与二分查找的代码,也给自己回顾一篇。

 以下的代码都是我经vc2005 测试通过的。

//划分区间函数  最主要的函数

int Partitionfun(int * intarray,int i,int j)

{

 int key = intarray[i]; //排序的主元值

 while(i<j)

 {

  while(i<j&&intarray[j]>=key) j--;

  if (i<j)

  {

   intarray[i]= intarray[j];

   i++;

  }

  while(i<j&&intarray[i]<=key) i++;

  if (i<j)

  {

   intarray[j] = intarray[i];

   j--;

  }

 }

 intarray[i]= key;

 return i;

}

//递归调用上面的函数

void   QuickSort(int * intarray,int i,int j)

{

  int midpos;

  if (i<j)

  {

    midpos= Partitionfun(intarray,i,j);

    QuickSort(intarray,i,midpos-1);

    QuickSort(intarray,midpos+1,j);

  }

}

 

//二分查找

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

int  BinarySearch(int * pArray,int pKey,int pStart,int pEnd)

{

 int midd;

 while(pStart<=pEnd)    // 注意事项 别写成了小于了,这样查询最后的元素有问题

 {

  midd=(pStart+pEnd)/2;

  if (pArray[midd]==pKey)

  {

   return midd;

  }else if(pArray[midd]>pKey)

  {

   pEnd = midd-1;   //记得-1(不然死循环)

  }else

  {

   pStart= midd+1;  //记得+1  (不然死循环)

  }

 }

   return  midd;

}

 

//查找数组第2大值

int FindSecond(int * pArray,int len)

{

 int sencond = 0;

 int maxValue = pArray[0];

 for(int i=1;i<len;i++)

 {

  if (maxValue<pArray[i])

  {

   sencond = maxValue;

   maxValue=pArray[i];

  }else if (pArray[i]>sencond)

  {

   sencond = pArray[i];

  }

 }

 return sencond;

}

 

程序调用

void main()

{

 cout<<"hello word!"<<endl;

 int  intarray[]={12,52,36,22,11,44,5,22,336,2,25,3,6,25,1,4,8,5,4,11,44,55,66,33,22,44,77,55,22,11,44,55,66,5,5555,22222,11111,777777,444444,11111,111,

 5555,5555,66666,333333,22222,11111,44444,77777,454444,555555,444444111,1111144,1144};

 QuickSort(intarray,0,sizeof(intarray)/sizeof(int)-1);

 for (int i=0;i<sizeof(intarray)/sizeof(int);i++)

 {

  cout<<intarray[i]<<endl;

 }

 

 cout<<BinarySearch(intarray,444444111,0,sizeof(intarray)/sizeof(int)-1)<<endl;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 测试