[MM32软件] c语言几大基本算法

[复制链接]
1437|1
 楼主| mmbs 发表于 2024-4-24 18:00 | 显示全部楼层 |阅读模式
  1. // 冒泡排序
  2. void bubbleSort(int arr[], int n) {
  3.     int i, j, temp;
  4.     for (i = 0; i < n - 1; i++)
  5.         for (j = 0; j < n - i - 1; j++)
  6.             if (arr[j] > arr[j + 1]) {
  7.                 temp = arr[j];
  8.                 arr[j] = arr[j + 1];
  9.                 arr[j + 1] = temp;
  10.             }
  11. }

  12. // 选择排序
  13. void selectionSort(int arr[], int n) {
  14.     int i, j, min_idx;
  15.     for (i = 0; i < n - 1; i++) {
  16.         min_idx = i;
  17.         for (j = i + 1; j < n; j++)
  18.             if (arr[j] < arr[min_idx])
  19.                 min_idx = j;
  20.         swap(&arr[min_idx], &arr[i]);
  21.     }
  22. }

  23. // 插入排序
  24. void insertionSort(int arr[], int n) {
  25.     int i, j, key;
  26.     for (i = 1; i < n; i++) {
  27.         key = arr[i];
  28.         j = i - 1;
  29.         while (j >= 0 && arr[j] > key) {
  30.             arr[j + 1] = arr[j];
  31.             j = j - 1;
  32.         }
  33.         arr[j + 1] = key;
  34.     }
  35. }

  36. // 快速排序
  37. int partition (int arr[], int low, int high) {
  38.     int pivot = arr[high];
  39.     int i = (low - 1);
  40.     for (j = low; j <= high - 1; j++) {
  41.         if (arr[j] < pivot) {
  42.             i++;
  43.             swap(&arr[i], &arr[j]);
  44.         }
  45.     }
  46.     swap(&arr[i + 1], &arr[high]);
  47.     return (i + 1);
  48. }

  49. void quickSort(int arr[], int low, int high) {
  50.     if (low < high) {
  51.         int pi = partition(arr, low, high);
  52.         quickSort(arr, low, pi - 1);
  53.         quickSort(arr, pi + 1, high);
  54.     }
  55. }

  56. // 归并排序
  57. void merge(int arr[], int l, int m, int r) {
  58.     int i, j, k;
  59.     int n1 = m - l + 1;
  60.     int n2 = r - m;
  61.     int L[n1], R[n2];
  62.     for (i = 0; i < n1; i++)
  63.         L[i] = arr[l + i];
  64.     for (j = 0; j < n2; j++)
  65.         R[j] = arr[m + 1 + j];
  66.     i = 0;
  67.     j = 0;
  68.     k = l;
  69.     while (i < n1 && j < n2) {
  70.         if (L[i] <= R[j]) {
  71.             arr[k] = L[i];
  72.             i++;
  73.         }
  74.         else {
  75.             arr[k] = R[j];
  76.             j++;
  77.         }
  78.         k++;
  79.     }
  80.     while (i < n1) {
  81.         arr[k] = L[i];
  82.         i++;
  83.         k++;
  84.     }
  85.     while (j < n2) {
  86.         arr[k] = R[j];
  87.         j++;
  88.         k++;
  89.     }
  90. }

  91. void mergeSort(int arr[], int l, int r) {
  92.     if (l < r) {
  93.         int m = l + (r - l) / 2;
  94.         mergeSort(arr, l, m);


lidi911 发表于 2024-4-24 23:50 来自手机 | 显示全部楼层
这不就是C语言10大常用算法之一吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

197

主题

6922

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部