数组排序

冒泡排序

#include <stdio.h>

// 遍历数组
void printArr(int array[], int length);
// 冒泡排序
void bubbleSort(int array[], int length);

int main(void) {
  /*
   * 冒泡排序:
   *     1、相邻的数据两两比较,小的放前面,大的放后面
   *     2、第一轮比较完毕之后,最大值就已经确定,第二轮可以少循环一次,后面以此类推
   *     3、如果数组中有n个数据,总共执行n-1轮的代码就可以了
   * */
  int arr[] = {3, 5, 2, 1, 4};
  int len = sizeof(arr) / sizeof(arr[0]);

  printArr(arr, len);
  bubbleSort(arr, len);
  printArr(arr, len);

  return 0;
}

void printArr(int array[], int length) {
  for (int i = 0; i < length; i++) {
    printf("%d ", array[i]);
  }
  printf("\n");
}

void bubbleSort(int array[], int length) {
  // 外循环:把内循环执行了(length - 1)次
  for (int i = 0; i < length - 1; i++) {
    // 内循环:找到本次循环的最大值,并把它放到右边
    for (int j = 0; j < length - 1 - i; j++) {
      if (array[j] > array[j + 1]) {
        int temp = array[j];
        array[j] = array[j + 1];
        array[j + 1] = temp;
      }
    }
  }
}

选择排序

#include <stdio.h>

// 遍历数组
void printArr(int array[], int length);
// 选择排序
void selectionSort(int array[], int length);

int main(void) {
  /*
   * 选择排序:
   *     从0索引开始,拿着每一个索引上的元素跟后面的元素依次比较,
   *     小的放前面,大的放后面,以此类推
   * */
  int arr[] = {3, 5, 2, 1, 4};
  int len = sizeof(arr) / sizeof(arr[0]);

  printArr(arr, len);
  selectionSort(arr, len);
  printArr(arr, len);

  return 0;
}

void printArr(int array[], int length) {
  for (int i = 0; i < length; i++) {
    printf("%d ", array[i]);
  }
  printf("\n");
}

void selectionSort(int array[], int length) {
  for (int i = 0; i < length - 1; i++) {
    for (int j = i + 1; j < length; j++) {
      if (array[i] > array[j]) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
      }
    }
  }
}
posted @ 2026-01-15 11:29  Zhuye_inking  阅读(6)  评论(0)    收藏  举报