} } return 0; }
13. Éèa1, a2,?, anÊǼ¯ºÏ{1, 2, ?, n}µÄÒ»¸öÅÅÁУ¬Èç¹ûi
//Óù鲢½øÐÐÅÅÐò
//µ±Ò»¸ö×Ó¼¯µÄÒ»¸öÊý´óÓÚµÚ¶þ¸ö×Ó¼¯µÄÒ»¸öÊý£¬ÎªÄæÐò£¬¼´a[i]>a[j] //ÔòÄæÐòÊýΪend-j+1;
#include
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 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 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); }