当前位置:   article > 正文

寒假作业2024.2.6

寒假作业2024.2.6

1.现有无序序列数组为23,24,12,5,33,5347,请使用以下排序实现编程
函数1:请使用冒泡排序实现升序排序
函数2:请使用简单选择排序实现升序排序
函数3:请使用直接插入排序实现升序排序
函数4:请使用插入排序实现升序排序

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <unistd.h>
  6. void bubble(int a[],int n);
  7. void simple(int b[],int n);
  8. void dir_insert(int c[],int n);
  9. void quick(int d[],int low,int high);
  10. int main(int argc, const char *argv[])
  11. {
  12. //冒泡排序
  13. int a[]={23,24,12,5,33,5,34,7};
  14. int n=sizeof(a)/sizeof(a[0]);
  15. bubble(a,n);
  16. //简单选择排序
  17. int b[]={23,24,12,5,33,5,34,7};
  18. simple(b,n);
  19. //直接插入排序
  20. int c[]={23,24,12,5,33,5,34,7};
  21. dir_insert(c,n);
  22. //快速排序
  23. int d[]={23,24,12,5,33,5,34,7};
  24. puts("排序前为:");
  25. for(int i=0;i<n;i++)
  26. {
  27. printf("%d ",d[i]);
  28. }
  29. puts("");
  30. puts("快速排序后结果为:");
  31. quick(d,0,n-1);
  32. for(int i=0;i<n;i++)
  33. {
  34. printf("%d ",d[i]);
  35. }
  36. puts("");
  37. return 0;
  38. }
  39. //冒泡排序
  40. void bubble(int a[],int n)
  41. {
  42. puts("排序前为:");
  43. for(int i=0;i<n;i++)
  44. {
  45. printf("%d ",a[i]);
  46. }
  47. puts("");
  48. puts("冒泡排序后结果为:");
  49. for(int i=1;i<n;i++)
  50. {
  51. for(int j=0;j<n-i;j++)
  52. {
  53. if(a[j]> a[j+1])
  54. {
  55. int t=a[j];
  56. a[j]=a[j+1];
  57. a[j+1]=t;
  58. }
  59. }
  60. }
  61. for(int i=0;i<n;i++)
  62. {
  63. printf("%d ",a[i]);
  64. }
  65. puts("");
  66. }
  67. //简单选择排序
  68. void simple(int b[],int n)
  69. {
  70. puts("排序前为:");
  71. for(int i=0;i<n;i++)
  72. {
  73. printf("%d ",b[i]);
  74. }
  75. puts("");
  76. puts("简单选择排序后结果为:");
  77. for(int i=0;i<n-1;i++)
  78. {
  79. int min=i;
  80. for(int j=i+1;j<n;j++)
  81. {
  82. if(b[min]>b[j])
  83. {
  84. min=j;
  85. }
  86. }
  87. if(min!=i)
  88. {
  89. int t=b[min];
  90. b[min]=b[i];
  91. b[i]=t;
  92. }
  93. }
  94. for(int i=0;i<n;i++)
  95. {
  96. printf("%d ",b[i]);
  97. }
  98. puts("");
  99. }
  100. //直接插入排序
  101. void dir_insert(int c[],int n)
  102. {
  103. puts("排序前为:");
  104. for(int i=0;i<n;i++)
  105. {
  106. printf("%d ",c[i]);
  107. }
  108. puts("");
  109. puts("直接插入排序后结果为:");
  110. int j;
  111. for(int i=1;i<n;i++)
  112. {
  113. int temp=c[i];
  114. for(j=i-1;j>=0&&c[j]>temp;j--)
  115. {
  116. c[j+1]=c[j];
  117. }
  118. c[j+1]=temp;
  119. }
  120. for(int i=0;i<n;i++)
  121. {
  122. printf("%d ",c[i]);
  123. }
  124. puts("");
  125. }
  126. //确定基准值
  127. int one_sort(int d[],int low,int high)
  128. {
  129. int key=d[low];
  130. while(low<high)
  131. {
  132. while(low<high&&key<=d[high])
  133. high--;
  134. d[low]=d[high];
  135. while(low<high&&key>=d[low])
  136. low++;
  137. d[high]=d[low];
  138. }
  139. d[low]=key;
  140. return low;
  141. }
  142. //快速排序
  143. void quick(int d[],int low,int high)
  144. {
  145. if(low>=high)
  146. return;
  147. int mid=one_sort(d,low,high);
  148. quick(d,low,mid-1);
  149. quick(d,mid+1,high);
  150. }

现象展示:

 

 2.请编程实现
写个递归函数 DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如:调用 DigitSum(1729),则返回 1+7+2+9,它的和是 19
输入1729,输出 19

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <unistd.h>
  6. int DigitSum(int n)
  7. {
  8. if(n==0)
  9. return 0;
  10. else
  11. return n%10+DigitSum(n/10);
  12. }
  13. int main(int argc, const char *argv[])
  14. {
  15. int a=1729;
  16. int sum=DigitSum(a);
  17. printf("sum=%d\n",sum);
  18. return 0;
  19. }

现象展示:

 

3.请编程实现
写一个宏,可以将一个 int 型整数的二进制位的奇数位和偶数位交换

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <unistd.h>
  6. #define Exchange(num) (((num & 0x55555555) << 1 )|((num & 0xaaaaaaaa) >> 1 ))
  7. int main(int argc, const char *argv[])
  8. {
  9. int num;
  10. printf("please enter num:");
  11. scanf("%d",&num);
  12. printf("交换前数值为: %d\n",num);
  13. num=Exchange(num);
  14. printf("交换后数值为: %d\n",num);
  15. return 0;
  16. }

现象展示:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/924951
推荐阅读
相关标签
  

闽ICP备14008679号