当前位置:   article > 正文

2.6:冒泡、简选、直插、快排,递归,宏

2.6:冒泡、简选、直插、快排,递归,宏

1.冒泡排序、简单选择排序、直接插入排序、快速排序(升序)

程序代码:

  1. 1 #include<stdio.h>
  2. 2 #include<string.h>
  3. 3 #include<stdlib.h>
  4. 4 void Bubble(int arr[],int len);
  5. 5 void simple_sort(int arr[],int len);
  6. 6 void insert_sort(int arr[],int len);
  7. 7 int one_sort(int arr[],int low,int high);
  8. 8 void output(int arr[],int len);
  9. 9 void quick_sort(int arr[],int low,int high);
  10. 10 int main(int argc, const char *argv[])
  11. 11 {
  12. 12 int arr[]={23,24,12,5,33,5,34,7};
  13. 13 int len=sizeof(arr)/sizeof(arr[0]);
  14. 14 /* //冒泡排序升序
  15. 15 Bubble(arr,len);
  16. 16 //简单选择排序升序
  17. 17 simple_sort(arr,len);
  18. 18 //直接插入排序升序
  19. 19 insert_sort(arr,len);*/
  20. 20 //快速排序
  21. 21 quick_sort(arr,0,len-1);
  22. 22 //输出
  23. 23 output(arr,len);
  24. 24 return 0;
  25. 25 }
  26. 26 //冒泡排序升序
  27. 27 void Bubble(int arr[],int len)
  28. 28 {
  29. 29 for(int i=1;i<len;i++)
  30. 30 {
  31. 31 for(int j=0;j<len-i;j++)
  32. 32 {
  33. 33 if(arr[j]>arr[j+1])
  34. 34 {
  35. 35 int t=arr[j];
  36. 36 arr[j]=arr[j+1];
  37. 37 arr[j+1]=t;
  38. 38 }
  39. 39 }
  40. 40 }
  41. 41 }
  42. 42 //输出
  43. 43 void output(int arr[],int len)
  44. 44 {
  45. 45 for(int i=0;i<len;i++)
  46. 46 {
  47. 47 printf("%-4d",arr[i]);
  48. 48 }
  49. 49 puts("");
  50. 50 }
  51. 51 //简单选择排序升序
  52. 52 void simple_sort(int arr[],int len)
  53. 53 {
  54. 54 for(int i=0;i<len-1;i++)
  55. 55 {
  56. 56 int min=i;
  57. 57 for(int j=i+1;j<len;j++)
  58. 58 {
  59. 59 if(arr[min]>arr[j])
  60. 60 min=j;
  61. 61 }
  62. 62 if(i!=min)
  63. 63 {
  64. 64 int t=arr[i];
  65. 65 arr[i]=arr[min];
  66. 66 arr[min]=t;
  67. 67 }
  68. 68 }
  69. 69 }
  70. 70 //直接插入排序升序
  71. 71 void insert_sort(int arr[],int len)
  72. 72 {
  73. 73 //有序序列:第一个 无序序列:剩余元素
  74. 74 for(int i=1;i<len;i++)
  75. 75 {
  76. 76 int j;
  77. 77 int temp=arr[i];//后移,保存第一个插入元素(arr[1])
  78. 78 for(j=i-1;j>=0&&arr[j]>temp;j--)//依次和有序序列倒叙比较后移
  79. 79 arr[j+1]=arr[j];
  80. 80 arr[j+1]=temp;
  81. 81 }
  82. 82 }
  83. 83 //快速排序(基于有序数列)
  84. 84 //一次排序
  85. 85 //返回基准值下标(中间值下标)
  86. 86 int one_sort(int arr[],int low,int high)
  87. 87 {
  88. 88 int key=arr[low];
  89. 89 while(low<high)//low==high结束
  90. 90 {
  91. 91 while(low<high&&key<=arr[high])//倒叙比较
  92. 92 high--;
  93. 93 arr[low]=arr[high];
  94. 94 while(low<high&&key>=arr[low])//正序比较
  95. 95 low++;
  96. 96 arr[high]=arr[low];
  97. 97 }
  98. 98 arr[low]=key;
  99. 99 return low;
  100. 100 }
  101. 101 //快排
  102. 102 void quick_sort(int arr[],int low,int high)
  103. 103 {
  104. 104 //判空判一
  105. 105 if(low>=high)
  106. 106 return;
  107. 107 //一次排序
  108. 108 int mid=one_sort(arr,low,high);
  109. 109 //递归左子序列
  110. 110 quick_sort(arr,low,mid-1);
  111. 111 //递归右子序列
  112. 112 quick_sort(arr,mid+1,high);
  113. 113 }

运行结果:

2.递归函数计算非负整数各个位之和

程序代码:

  1. 1 #include<stdio.h>
  2. 2 #include<string.h>
  3. 3 #include<stdlib.h>
  4. 4 int DigitSum(int n);
  5. 5 int main(int argc, const char *argv[])
  6. 6 {
  7. 7 int n;
  8. 8 printf("please enter n:");
  9. 9 scanf("%d",&n);
  10. 10 if(n<0)
  11. 11 printf("num error\n");
  12. 12 else
  13. 13 {
  14. 14 int sum=DigitSum(n);
  15. 15 printf("%d\n",sum);
  16. 16 }
  17. 17 return 0;
  18. 18 }
  19. 19 int DigitSum(int n)
  20. 20 {
  21. 21 if(n==0)
  22. 22 return 0;
  23. 23 else
  24. 24 return n%10+DigitSum(n/10);
  25. 25 }

运行结果:

3.写一个宏,实现int型整数的二进制位的奇数位和偶数位交换

程序代码:

  1. 1 #include<stdio.h>
  2. 2 #include<string.h>
  3. 3 #include<stdlib.h>
  4. 4 #define SWAP(n) (((n & 0xaaaaaaaa) >> 1) | ((n & 0x5
  5. 5 int main(int argc, const char *argv[])
  6. 6 {
  7. 7 int n;
  8. 8 printf("please enter n:");
  9. 9 scanf("%d",&n);
  10. 10 int ret=SWAP(n);
  11. 11 printf("ret=%d\n",ret);
  12. 12 //5:0101奇数位为1
  13. 13 //a:1010偶数位为1
  14. 14 //一个整数32位,十六进制:0x55555555,0xaaaaaaaa
  15. 15 //&:按位与全1为1,其余为0
  16. 16 //0x55555555 & n :保留奇数位
  17. 17 //0xaaaaaaaa & n :保留偶数位
  18. 18 //再位运算,奇数位左移1(<<)奇变偶
  19. 19 // 偶数位右移1 (>>) 偶变奇
  20. 20 //再按位或|,有1为1,全0为0,合并一起
  21. 21
  22. 22 return 0;
  23. 23 }

运行结果:

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

闽ICP备14008679号