ToB企服应用市场:ToB评测及商务社交产业平台

标题: 嵌入式开发高频面试题——第四章 常见算法(上) [打印本页]

作者: 海哥    时间: 2024-9-4 08:22
标题: 嵌入式开发高频面试题——第四章 常见算法(上)
4.1 排序算法

4.1.1 各种排序算法的时间空间复杂度、稳定性 ⭐⭐⭐⭐⭐

排序算法平均时间复杂度最好情况时间复杂度最坏情况时间复杂度空间复杂度稳定性冒泡排序O(n^2)O(n)O(n^2)O(1)稳定选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定插入排序O(n^2)O(n)O(n^2)O(1)稳定希尔排序O(n log n)O(n log^2 n)O(n^2)O(1)不稳定归并排序O(n log n)O(n log n)O(n log n)O(n)稳定快速排序O(n log n)O(n log n)O(n^2)O(log n)不稳定
4.1.2 各种排序算法什么时候有最好情况、最坏情况(尤其是快排) ⭐⭐⭐⭐



4.1.3 冒泡排序 ⭐⭐⭐⭐

  1. void bubbleSort(int arr[], int n) {
  2.     for (int i = 0; i < n - 1; i++) {
  3.         bool swapped = false;
  4.         for (int j = 0; j < n - i - 1; j++) {
  5.             if (arr[j] > arr[j + 1]) {
  6.                 std::swap(arr[j], arr[j + 1]);
  7.                 swapped = true;
  8.             }
  9.         }
  10.         if (!swapped)
  11.             break;
  12.     }
  13. }
复制代码
4.1.4 选择排序 ⭐⭐⭐⭐

  1. void selectionSort(int arr[], int n) {
  2.     for (int i = 0; i < n - 1; i++) {
  3.         int minIndex = i;
  4.         for (int j = i + 1; j < n; j++) {
  5.             if (arr[j] < arr[minIndex])
  6.                 minIndex = j;
  7.         }
  8.         std::swap(arr[i], arr[minIndex]);
  9.     }
  10. }
复制代码
4.1.5 插入排序 ⭐⭐⭐⭐

  1. void insertionSort(int arr[], int n) {
  2.     for (int i = 1; i < n; i++) {
  3.         int key = arr[i];
  4.         int j = i - 1;
  5.         while (j >= 0 && arr[j] > key) {
  6.             arr[j + 1] = arr[j];
  7.             j--;
  8.         }
  9.         arr[j + 1] = key;
  10.     }
  11. }
复制代码
4.1.6 希尔排序 ⭐⭐⭐⭐

  1. void shellSort(int arr[], int n) {
  2.     for (int gap = n / 2; gap > 0; gap /= 2) {
  3.         for (int i = gap; i < n; i++) {
  4.             int temp = arr[i];
  5.             int j;
  6.             for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
  7.                 arr[j] = arr[j - gap];
  8.             }
  9.             arr[j] = temp;
  10.         }
  11.     }
  12. }
复制代码
4.1.7 归并排序 ⭐⭐⭐⭐

  1. void merge(int arr[], int left, int mid, int right) {
  2.     int n1 = mid - left + 1;
  3.     int n2 = right - mid;
  4.     int L[n1], R[n2];
  5.     for (int i = 0; i < n1; i++)
  6.         L[i] = arr[left + i];
  7.     for (int i = 0; i < n2; i++)
  8.         R[i] = arr[mid + 1 + i];
  9.     int i = 0, j = 0, k = left;
  10.     while (i < n1 && j < n2) {
  11.         if (L[i] <= R[j])
  12.             arr[k++] = L[i++];
  13.         else
  14.             arr[k++] = R[j++];
  15.     }
  16.     while (i < n1)
  17.         arr[k++] = L[i++];
  18.     while (j < n2)
  19.         arr[k++] = R[j++];
  20. }
  21. void mergeSort(int arr[], int left, int right) {
  22.     if (left < right) {
  23.         int mid = left + (right - left) / 2;
  24.         mergeSort(arr, left, mid);
  25.         mergeSort(arr, mid + 1, right);
  26.         merge(arr, left, mid, right);
  27.     }
  28. }
复制代码
4.1.8 快速排序 ⭐⭐⭐⭐⭐

  1. int partition(int arr[], int low, int high) {
  2.     int pivot = arr[high];
  3.     int i = (low - 1);
  4.     for (int j = low; j <= high - 1; j++) {
  5.         if (arr[j] < pivot) {
  6.             i++;
  7.             std::swap(arr[i], arr[j]);
  8.         }
  9.     }
  10.     std::swap(arr[i + 1], arr[high]);
  11.     return (i + 1);
  12. }
  13. void quickSort(int arr[], int low, int high) {
  14.     if (low < high) {
  15.         int pi = partition(arr, low, high);
  16.         quickSort(arr, low, pi - 1);
  17.         quickSort(arr, pi + 1, high);
  18.     }
  19. }
复制代码
4.1.9 快排的 partition 函数与归并的 Merge 函数 ⭐⭐⭐



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4