基于visual Studio2013解决面试题之1408桶排序

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

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               



题目



解决代码及点评

  1.   
  1.   
  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

这里写图片描述

猜你喜欢

转载自blog.csdn.net/fdgugfv/article/details/83989410