算法-冒泡和选择排序 - 图1

冒泡法

相邻两个位数比较,较小值往前跑,较大值往后跑。

  1. /**
  2. * @Auther: 小雷学长
  3. * @Date: 2021/12/9 - 17:07
  4. */
  5. #include <stdio.h>
  6. void main() {
  7. /**
  8. * @pescripition 冒泡排序
  9. */
  10. //定义5个数字
  11. int a[5] = {12, 5, 34, 23, 1};
  12. int p_nums;
  13. printf("原数组为:\n");
  14. for (p_nums = 0; p_nums < 5; p_nums++) {
  15. printf("%5d", a[p_nums]);
  16. }
  17. /**
  18. * @pescripition 冒泡排序
  19. * @method 利用for嵌套
  20. * @param i,j,temp:临时值
  21. */
  22. int i, j, temp;
  23. //列向排序
  24. for (i = 0; i < 4; i++) {
  25. /*
  26. * 相邻排序,将小的值向前移
  27. * j<4-i 每次排序最大值一定在末尾,已排过的无需重复排序
  28. */
  29. for (j = 0; j < 4 - i; j++) {
  30. //相邻比较
  31. if (a[j] > a[j + 1]) {
  32. //将小的值赋值到temp,替换,保持较小的值在前面
  33. temp = a[j + 1];
  34. //将大的值往后移
  35. a[j + 1] = a[j];
  36. //小值往前赋值
  37. a[j] = temp;
  38. }
  39. }
  40. }
  41. printf("\n从小到大排序为:\n");
  42. for (i = 0; i < 5; i++) {
  43. printf("%5d", a[i]);
  44. }
  45. }

选择排序

每次循环用首位数与次位数比较,若次位比首位小,则较小值前移,较大值后移动。

/**
* @Auther: 小雷学长
* @Date: 2021/12/9 - 17:49
* @name: 选择排序
* @descripition 每次循环用首位数与次位数比较
*/
#include<stdio.h>

void main() {
    int i, j, temp;
    //数组
    int a[10] = {12, 5, 34, 23, 1, 15, 56, 61, 52, 87};
    printf("原数组为:\n");
    //打印原数组
    for (i = 0; i < 10; i++) {
        printf("%5d", a[i]);
    }
    //10个数需要排序9次
    for (i = 0; i < 9; i++) {
        //每次循环用首位数与次位数比较,所以需要i+1(第二位)
        for (j = i + 1; j <= 9; j++) {
            //如果首位比次位大,将次位前移,与首位替换
            if (a[i] > a[j]) {
                temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }

        }

    }
    printf("\n从小到大排序为:\n");
    for (i = 0; i < 10; i++) {
        printf("%5d", a[i]);

    }


}