
排序算法
Rice__
走走停停
展开
-
C++实现基数排序
时间复杂度: O(d*n) 空间复杂度: O(n) 稳定性: 稳定 空间换取时间,代码实现 //基数排序,获取最大位数 int GetMaxBit(int arr[], int n) { int bit = 1; int factor = 10; for (size_t i = 0; i < n; i++) { if (arr[i] >= factor) { factor *= 10; bit++; } } return bit; } //基数.原创 2020-06-07 23:51:59 · 318 阅读 · 0 评论 -
C++实现归并排序
时间复杂度: O(nlog2n) 空间复杂度: O(n) 稳定性: 稳定 其原理是自底向上俩俩交换成有序合并,代码实现 //归并排序 void Merge(int arr1[], int arr2[], int n1, int n2); void MergeSort(int arr[], int n) { if (n > 1) { int mid = n / 2; MergeSort(arr, mid); MergeSort(arr + mid, n - mid); Me.原创 2020-06-07 23:46:37 · 2289 阅读 · 0 评论 -
C++实现选择排序(简单选择、堆排序)
排序名称 时间复杂度 空间复杂度 稳定性 简单选择排序 O(n^2) O(1) 不稳定 堆排序 O(nlog2n) O(1) 不稳定 1. 简单选择排序 void SelectSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { int min = i; //查找最小的元素 for (int j = i + 1; j < n; j++) { if (arr[min] > arr[...原创 2020-06-07 23:39:37 · 179 阅读 · 0 评论 -
C++实现插入排序(直接插入、希尔排序)
排序名称 时间复杂度 空间复杂度 稳定性 直接插入排序 O(n^2) O(1) 稳定 希尔排序 O(nlog2n) O(1) 不稳定 1. 直接插入排序 void InsertSort(int arr[], int n) { for (int i = 0; i < n; i++) { if (arr[i] < arr[i-1]){ int cur = arr[i]; int j = i - 1; for (; cur < arr[j]; j...原创 2020-06-07 23:32:39 · 216 阅读 · 0 评论 -
C++实现交换排序(冒泡、快速排序)
排序名称 时间复杂度 空间复杂度 稳定性 冒泡排序 O(n^2) O(1) 稳定 快速排序 O(nlog2n) O(nlog2n) 不稳定 1. 冒泡排序 void BubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - i - 1; j++) if (arr[j] > arr[j + 1]) std::swap(arr[j],...原创 2020-06-07 23:26:39 · 204 阅读 · 0 评论 -
冒泡、选择、插入排序及分析
排序名称 时间复杂度 空间复杂度 稳定性 冒泡排序 O(n^2) O(1) 稳定 选择排序 O(n^2) O(1) 不稳定 插入排序 O(n^2) O(1) 稳定 稳定性即排序后相同的元素的前后相对次序是否改变 1. 冒泡排序 void BubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - i - 1; j++) if (arr[...原创 2020-05-16 22:22:48 · 185 阅读 · 0 评论