Ëã·¨Éè¼ÆÓë·ÖÎö£¨µÚ2°æ£© Íõºì÷ ºúÃ÷ ϰÌâ´ð°¸ ÏÂÔØ±¾ÎÄ

} } return 0; }

13. Éèa1, a2,?, anÊǼ¯ºÏ{1, 2, ?, n}µÄÒ»¸öÅÅÁУ¬Èç¹ûiaj£¬ÔòÐòż(ai, aj)³ÆÎª¸ÃÅÅÁеÄÒ»¸öÄæÐò¡£ÀýÈ磬2, 3, 1ÓÐÁ½¸öÄæÐò£º(3, 1)ºÍ(2, 1)¡£Éè¼ÆË㷨ͳ¼Æ¸ø¶¨ÅÅÁÐÖк¬ÓÐÄæÐòµÄ¸öÊý¡£

//Óù鲢½øÐÐÅÅÐò

//µ±Ò»¸ö×Ó¼¯µÄÒ»¸öÊý´óÓÚµÚ¶þ¸ö×Ó¼¯µÄÒ»¸öÊý£¬ÎªÄæÐò£¬¼´a[i]>a[j] //ÔòÄæÐòÊýΪend-j+1;

#include using namespace std;

int count;

void Merge(int a[],int a1[],int begin,int mid,int end)//ºÏ²¢×ÓÐòÁÐ {

int i=begin,j=mid+1,k=end; while(i<=mid&&j<=end) {

if(a[i]<=a[j]) a1[k++]=a[i++];//È¡a[i]ºÍa[j]ÖнÏСÕß·ÅÈër1[k] else { a1[k++]=a[j++]; count+=(end-j+1); } }

while(i<=mid) a1[k++]=a[i++]; while(j<=end) a1[k++]=a[j++]; }

void MergeSort(int a[ ], int begin, int end) {

int mid,a1[1000]; if(begin==end) return ; else

{ mid=(begin+end)/2; MergeSort(a,begin,mid); MergeSort(a,mid+1,end); Merge(a,a1,begin,mid,end); } }

int main() { int a[6]={6,5,4,3,2,1}; count=0; MergeSort(a,0,6); cout<

14. Ñ­»·ÈüÈճ̰²ÅÅÎÊÌâ¡£ÉèÓÐn=2k¸öÑ¡ÊÖÒª½øÐÐÍøÇòÑ­»·Èü£¬ÒªÇóÉè¼ÆÒ»¸öÂú×ãÒÔÏÂÒªÇóµÄ±ÈÈüÈÕ³Ì±í£º

£¨1£©Ã¿¸öÑ¡ÊÖ±ØÐëÓëÆäËûn-1¸öÑ¡ÊÖ¸÷ÈüÒ»´Î£» £¨2£©Ã¿¸öÑ¡ÊÖÒ»ÌìÖ»ÄÜÈüÒ»´Î¡£

²ÉÓ÷ÖÖη½·¨¡£

½«2^kÑ¡ÊÖ·ÖΪ2^k-1Á½×飬²ÉÓõݹ鷽·¨£¬¼ÌÐø½øÐзÖ×飬ֱµ½Ö»Ê£ÏÂ2¸öÑ¡ÊÖʱ£¬È»ºó½øÐбÈÈü£¬»ØËݾͿÉÒÔÖ¸¶¨±ÈÈüÈճ̱íÁË

15. ¸ñÀ×ÂëÊÇÒ»¸ö³¤¶ÈΪ2nµÄÐòÁУ¬ÐòÁÐÖÐÎÞÏàÍ¬ÔªËØ£¬ÇÒÿ¸öÔªËØ¶¼Êdz¤¶ÈΪnµÄ¶þ½øÖÆÎ»´®£¬ÏàÁÚÔªËØÇ¡ºÃÖ»ÓÐ1λ²»Í¬¡£ÀýÈ糤¶ÈΪ23µÄ¸ñÀ×ÂëΪ(000, 001, 011, 010, 110, 111, 101, 100)¡£Éè¼Æ·ÖÖÎËã·¨¶ÔÈÎÒâµÄnÖµ¹¹ÔìÏàÓ¦µÄ¸ñÀ×Âë¡£

//¹¹Ôì¸ñÀ×Âë

#include using namespace std;

int n;

char a[100]; void gelei(int k) {

if(k==n) {

cout<

}

gelei(k+1);

a[k]='0'?'1':'0'; //È¡·´

gelei(k+1); }

int main() {

while(cin>>n && n != 0) { memset(a,'0',sizeof(a)); //³õʼ»¯£¬È«²¿ÖÃÁã

a[n] ='\\0'; gelei(0); cout<

return 0; }

16. ¾ØÕó³Ë·¨¡£Á½¸ön¡ÁnµÄ¾ØÕóXºÍYµÄ³Ë»ýµÃµ½ÁíÍâÒ»¸ön¡ÁnµÄ¾ØÕóZ£¬ÇÒZij Âú×ã £¨1¡Üi, j¡Ün£©£¬Õâ¸ö¹«Ê½¸ø³öÁËÔËÐÐʱ¼äΪO(n3)µÄËã·¨¡£¿ÉÒÔÓÃ·Ö Ö稽â¾ö¾ØÕó³Ë·¨ÎÊÌ⣬½«¾ØÕóXºÍY¶¼»®·Ö³ÉËĸön/2¡Án/2µÄ×ӿ飬´Ó¶øXºÍYµÄ³Ë»ý¿ÉÒÔÓÃÕâЩ×Ó¿é½øÐбí´ï£¬¼´

´Ó¶øµÃµ½·ÖÖÎËã·¨£ºÏÈµÝ¹éµØ¼ÆËã8¸ö¹æÄ£Îªn/2µÄ¾ØÕó³Ë»ýAE¡¢BG¡¢AF¡¢BH¡¢CE¡¢DG¡¢CF¡¢DH£¬È»ºóÔÙ»¨·ÑO(n2)µÄʱ¼äÍê³É¼Ó·¨ÔËËã¼´¿É¡£ÇëÉè¼Æ·ÖÖÎË㷨ʵÏÖ¾ØÕó³Ë·¨£¬²¢·ÖÎöʱ¼äÐÔÄÜ¡£ÄÜ·ñÔٸĽøÕâ¸ö·ÖÖÎËã·¨£¿

ϰÌâ5

1. ÏÂÃæÕâ¸öÕÛ°ë²éÕÒËã·¨ÕýÈ·Âð£¿Èç¹ûÕýÈ·£¬Çë¸ø³öËã·¨µÄÕýÈ·ÐÔÖ¤Ã÷£¬Èç¹û²»ÕýÈ·£¬Çë

˵Ã÷²úÉú´íÎóµÄÔ­Òò¡£

int BinSearch(int r[ ], int n, int k) {

int low = 0, high = n - 1; int mid;

while (low <= high)

{

mid = (low + high) / 2; if (k < r[mid]) high = mid;

else if (k > r[mid]) low = mid;

else return mid; }

return 0;

}

´íÎó¡£ ÕýÈ·Ëã·¨£º

int BinSearch1(int r[ ], int n, int k) {

int low = 0, high = n - 1; int mid;

while (low <= high) {

mid = (low + high) / 2; if (k < r[mid]) high = mid - 1;

else if (k > r[mid]) low = mid + 1;

else return mid; }

return 0; }

2. Çëд³öÕÛ°ë²éÕҵĵݹéËã·¨£¬²¢·ÖÎöʱ¼äÐÔÄÜ¡£

//ÕÛ°ë²éÕҵĵݹéʵÏÖ

#include using namespace std;

int digui_search(int a[],int low,int high,int x) {

if (low > high) return 0;

int mid = (low+high)/2; if (a[mid] == x) return mid;

else if (a[mid] < x)

digui_search(a,low,mid-1,x); else

digui_search(a,mid+1,high,x); }