首页 > 代码库 > 8.8 冒泡排序 选择排序 二分查找 递归使用

8.8 冒泡排序 选择排序 二分查找 递归使用

冒泡排序:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define N 100000
  5. #define M 100000
  6. void show_arr(int * a,int n)
  7. {
  8. int i;
  9. for(i = 0; i < n; i++)
  10. {
  11. printf("%d ",a[i]);
  12. }
  13. printf("\n");
  14. }
  15. void init_arr(int * a, int n)
  16. {
  17. int i;
  18. srand(time(NULL));
  19. for(i = 0; i < n ; ++i)
  20. a[i] = rand() % M;
  21. }
  22. void sort_maopao(int * a , int n)
  23. {
  24. int i,j,temp;
  25. for(i = 0; i < n - 1 ; i++)
  26. {
  27. for( j = 0 ; j < n - i - 1 ; j++)
  28. {
  29. if(a[j] > a[j+1])
  30. {
  31. temp = a[j];
  32. a[j] = a[j+1];
  33. a[j+1] = temp;
  34. }
  35. }
  36. }
  37. return;
  38. }
  39. int main()
  40. {
  41. int a[N];
  42. init_arr(a , N);
  43. // show_arr(a, N);
  44. sort_maopao(a, N);
  45. // show_arr(a, N);
  46. return 0;
  47. }



选择排序:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define N 100000
  5. #define M 100000
  6. void show_arr(int * a,int n)
  7. {
  8. int i;
  9. for(i = 0; i < n; i++)
  10. {
  11. printf("%d ",a[i]);
  12. }
  13. printf("\n");
  14. }
  15. void init_arr(int * a, int n)
  16. {
  17. int i;
  18. srand(time(NULL));
  19. for(i = 0; i < n ; ++i)
  20. a[i] = rand() % M;
  21. }
  22. void sort_xuanze(int * a , int n)
  23. {
  24. int i,j,min,temp;
  25. for(i = 0; i < n - 1 ; i++)
  26. {
  27. min = i;
  28. for( j = i+1 ; j < n ; j++)
  29. if(a[min] > a[j])
  30. min = j;
  31. temp = a[min];
  32. a[min] = a[i];
  33. a[i] = temp;
  34. }
  35. return;
  36. }
  37. int main()
  38. {
  39. int a[N];
  40. init_arr(a , N);
  41. // show_arr(a, N);
  42. sort_xuanze(a, N);
  43. // show_arr(a, N);
  44. return 0;
  45. }




二分查找:查找一个元素在某个数组里(必须是有序的数组)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define N 10
  5. #define M 100
  6. void show_arr(int * a,int n)
  7. {
  8. int i;
  9. for(i = 0; i < n; i++)
  10. {
  11. printf("%d ",a[i]);
  12. }
  13. printf("\n");
  14. }
  15. void init_arr(int * a, int n)
  16. {
  17. int i;
  18. srand(time(NULL));
  19. for(i = 0; i < n ; ++i)
  20. a[i] = rand() % M;
  21. }
  22. void sort_xuanze(int * a , int n)
  23. {
  24. int i,j,min,temp;
  25. for(i = 0; i < n - 1 ; i++)
  26. {
  27. min = i;
  28. for( j = i+1 ; j < n ; j++)
  29. if(a[min] > a[j])
  30. min = j;
  31. temp = a[min];
  32. a[min] = a[i];
  33. a[i] = temp;
  34. }
  35. return;
  36. }
  37. int erfen_find(int * a, int n , int key)
  38. {
  39. int mid , l = 0 , r = n - 1; //mid是中间的坐标,l是左坐标,r是右坐标
  40. while( l <= r)
  41. {
  42. mid = ( l + r )/2;
  43. if( a[mid] < key)
  44. l = mid + 1;
  45. else if ( a[mid] > key)
  46. r = mid - 1;
  47. else
  48. return 1;
  49. }
  50. return 0;
  51. }
  52. int main()
  53. {
  54. int a[N];
  55. init_arr(a , N);
  56. //show_arr(a, N);
  57. sort_xuanze(a, N);
  58. show_arr(a, N);
  59. int key;
  60. scanf("%d",&key);
  61. if(erfen_find(a , N ,key)) //10 需要查找的数
  62. printf("find!\n");
  63. else
  64. printf("not find!\n");
  65. return 0;
  66. }



递归:(阶乘的实现)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int factorial(int n)
  4. {
  5. if( n == 0)
  6. return 1;
  7. n *= factorial(n - 1);
  8. }
  9. int main()
  10. {
  11. int num = factorial(6);
  12. printf("%d\n",num);
  13. return 0;
  14. }




递归打印三角形:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void fun(int n)
  4. {
  5. if (n == 0) return;
  6. fun(n - 1);
  7. int i;
  8. for (i = 0; i < n; ++i)
  9. printf("* ");
  10. putchar(‘\n‘);
  11. }
  12. int main()
  13. {
  14. fun(5);
  15. return 0;
  16. }



来自为知笔记(Wiz)


8.8 冒泡排序 选择排序 二分查找 递归使用