1. 程式人生 > >基於visual Studio2013解決面試題之1408桶排序

基於visual Studio2013解決面試題之1408桶排序

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                


題目



解決程式碼及點評

[cpp] view plain copy print
?
  1.   
[cpp] view plain copy print ?
  1.   
[cpp] view plain copy print ?
  1. <code class="language-cpp">/* 
  2.     桶排序
     
  3. */  
  4. #include<stdio.h>  
  5. #include<stdlib.h>  
  6. #define SIZE 100  
  7. void bucket_sort(unsigned *,int);//桶排序函式的原型  
  8. void print(unsigned *,int);//列印函式的原型  
  9. int main()  
  10. {  
  11.     unsigned array[SIZE];  
  12.     int i=0;  
  13.   
  14.     //為陣列元素隨機賦值  
  15.     for(i=0;i<SIZE;++i)  
  16.         array[i]=rand();  
  17.   
  18.     printf("排序前\n");  
  19.     print(array,SIZE);  
  20.   
  21.     //排序  
  22.     bucket_sort(array,SIZE);  
  23.   
  24.     printf("排序後\n");  
  25.     print(array,SIZE);  
  26.     system("pause");  
  27.     return 0;  
  28. }  
  29. void bucket_sort(unsigned * arr,int len)  
  30. {  
  31.     unsigned *buckets[10];//指標陣列  
  32.     unsigned n=1;//用於取整數各位上的值  
  33.     int index;//陣列下標計數索引  
  34.     int indexs[10];//各個桶下標計數索引  
  35.     int i,j;  
  36.   
  37.     //分配動態記憶體作為桶  
  38.     for(i=0;i<10;++i)  
  39.         buckets[i]=(unsigned *)malloc(sizeof(unsigned)*len);  
  40.   
  41.     while(1)  
  42.     {  
  43.         //計數索引清零  
  44.         index=0;  
  45.         for(i=0;i<10;++i)  
  46.             indexs[i]=0;  
  47.   
  48.         //陣列至桶  
  49.         for(i=0;i<len;++i)  
  50.             buckets[arr[i]/n%10][indexs[arr[i]/n%10]++]=arr[i];  
  51.   
  52.         //桶至陣列  
  53.         for(i=0;i<10;++i)  
  54.             for(j=0;j<indexs[i];++j)  
  55.                 arr[index++]=buckets[i][j];  
  56.   
  57.         //為取元素的下一位做準備  
  58.         n*=10;  
  59.   
  60.         //判斷是否該結束  
  61.         for(i=0;arr[i]<n&&i<len;++i);  
  62.         if(i==len) break;  
  63.     }  
  64.   
  65.     //釋放動態記憶體  
  66.     for(i=0;i<10;++i)  
  67.         free(buckets[i]);  
  68. }  
  69. void print(unsigned * arr,int len)  
  70. {  
  71.     int i=0;  
  72.     for(i=0;i<len;++i)  
  73.     {  
  74.         printf("%8d",arr[i]);  
  75.   
  76.         //5個元素一行  
  77.         if((i+1)%5==0)  
  78.             printf("\n");  
  79.     }  
  80. }  
  81. </code>  
/* 桶排序*/#include<stdio.h>#include<stdlib.h>#define SIZE 100void bucket_sort(unsigned *,int);//桶排序函式的原型void print(unsigned *,int);//列印函式的原型int main()unsigned array[SIZE]; int i=0//為陣列元素隨機賦值 for(i=0;i<SIZE;++i)  array[i]=rand(); printf("排序前\n"); print(array,SIZE); //排序 bucket_sort(array,SIZE); printf("排序後\n"); print(array,SIZE); system("pause"); return 0;}void bucket_sort(unsigned * arr,int len)unsigned *buckets[10];//指標陣列 unsigned n=1;//用於取整數各位上的值 int index;//陣列下標計數索引 int indexs[10];//各個桶下標計數索引 int i,j; //分配動態記憶體作為桶 for(i=0;i<10;++i)  buckets[i]=(unsigned *)malloc(sizeof(unsigned)*len); while(1) {  //計數索引清零  index=0;  for(i=0;i<10;++i)   indexs[i]=0;  //陣列至桶  for(i=0;i<len;++i)   buckets[arr[i]/n%10][indexs[arr[i]/n%10]++]=arr[i];  //桶至陣列  for(i=0;i<10;++i)   for(j=0;j<indexs[i];++j)    arr[index++]=buckets[i][j];  //為取元素的下一位做準備  n*=10;  //判斷是否該結束  for(i=0;arr[i]<n&&i<len;++i);  if(i==len) break; } //釋放動態記憶體 for(i=0;i<10;++i)  free(buckets[i]);}void print(unsigned * arr,int len)int i=0for(i=0;i<len;++i) {  printf("%8d",arr[i]);  //5個元素一行  if((i+1)%5==0)   printf("\n"); }}


程式碼下載及其執行

程式碼下載地址:http://download.csdn.net/detail/yincheng01/6704519

解壓密碼:c.itcast.cn


下載程式碼並解壓後,用VC2013開啟interview.sln,並設定對應的啟動專案後,點選執行即可,具體步驟如下:

1)設定啟動專案:右鍵點選解決方案,在彈出選單中選擇“設定啟動專案”


2)在下拉框中選擇相應專案,專案名和部落格編號一致

3)點選“本地Windows偵錯程式”執行


程式執行結果




               

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述