你还不会排序算法吗

发布时间:2023年12月23日

在这里插入图片描述>欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关注公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源!>>—>博主介绍:>CSDN优质创作者,CSDN实力新星,CSDN内容合伙人;>阿里云社区专家博主;>华为云社区云享专家;>51CTO社区入驻博主,掘金社区入驻博主,支付宝社区入驻博主,博客园博主。>>—>@TOC>>—>>专栏:《前沿技术文献与图书推荐》—# 十大排序算法以下是十种常见的排序算法及其C++代码实现:## 冒泡排序(Bubble Sort)cppvoid 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]) { swap(arr[j], arr[j + 1]); } } }} ## 选择排序(Selection Sort)cppvoid selectionSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } swap(arr[i], arr[minIndex]); }} ## 插入排序(Insertion Sort)cppvoid insertionSort(int arr[], int n) { for (int i = 1; i < n; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; }} ## 快速排序(Quick Sort)cppint partition(int arr[], int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j <= high - 1; j++) { if (arr[j] < pivot) { i++; swap(arr[i], arr[j]); } } swap(arr[i + 1], arr[high]); return i + 1;}void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); }} ## 归并排序(Merge Sort)cppvoid merge(int arr[], int l, int m, int r) { int n1 = m - l + 1; int n2 = r - m; int L[n1], R[n2]; for (int i = 0; i < n1; i++) { L[i] = arr[l + i]; } for (int j = 0; j < n2; j++) { R[j] = arr[m + 1 + j]; } int i = 0, j = 0, k = l; while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } while (i < n1) { arr[k] = L[i]; i++; k++; } while (j < n2) { arr[k] = R[j]; j++; k++; }}void mergeSort(int arr[], int l, int r) { if (l < r) { int m = l + (r - l) / 2; mergeSort(arr, l, m); mergeSort(arr, m + 1, r); merge(arr, l, m, r); }} ## 堆排序(Heap Sort)cppvoid heapify(int arr[], int n, int i) { int largest = i; int left = 2 * i + 1; int right = 2 * i + 2; if (left < n && arr[left] > arr[largest]) { largest = left; } if (right < n && arr[right] > arr[largest]) { largest = right; } if (largest != i) { swap(arr[i], arr[largest]); heapify(arr, n, largest); }}void heapSort(int arr[], int n) { for (int i = n / 2 - 1; i >= 0; i--) { heapify(arr, n, i); } for (int i = n - 1; i >= 0; i--) { swap(arr[0], arr[i]); heapify(arr, i, 0); }} ## 计数排序(Counting Sort) cppvoid countingSort(int arr[], int n) { int maxVal = *max_element(arr, arr + n); int minVal = *min_element(arr, arr + n); int range = maxVal - minVal + 1; int count[range] = {0}; for (int i = 0; i < n; i++) { count[arr[i] - minVal]++; } int index = 0; for (int i = 0; i < range; i++) { while (count[i] > 0) { arr[index++] = i + minVal; count[i]--; } }} ## 桶排序(Bucket Sort) cppvoid bucketSort(float arr[], int n) { float maxVal = *max_element(arr, arr + n); float minVal = *min_element(arr, arr + n); float range = maxVal - minVal; int bucketSize = range / n + 1; vector<vector<float>> buckets(n); for (int i = 0; i < n; i++) { float index = (arr[i] - minVal) / bucketSize; buckets[(int)index].push_back(arr[i]); } int index = 0; for (int i = 0; i < n; i++) { sort(buckets[i].begin(), buckets[i].end()); for (int j = 0; j < buckets[i].size(); j++) { arr[index++] = buckets[i][j]; } }} ## 基数排序(Radix Sort)cppvoid countingSortForRadix(int arr[], int n, int exp) { int output[n]; int count[10] = {0}; for (int i = 0; i < n; i++) { count[(arr[i] / exp) % 10]++; } for (int i = 1; i < 10; i++) { count[i] += count[i - 1]; } for (int i = n - 1; i >= 0; i--) { output[count[(arr[i] / exp) % 10] - 1] = arr[i]; count[(arr[i] / exp) % 10]--; } for (int i = 0; i < n; i++) { arr[i] = output[i]; }}void radixSort(int arr[], int n) { int maxVal = *max_element(arr, arr + n); for (int exp = 1; maxVal / exp > 0; exp *= 10) { countingSortForRadix(arr, n, exp); }} ## 希尔排序(Shell Sort)cppvoid shellSort(int arr[], int n) { for (int gap = n / 2; gap > 0; gap /= 2) { for (int i = gap; i < n; i++) { int temp = arr[i]; int j; for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) { arr[j] = arr[j - gap]; } arr[j] = temp; } }}在这里插入图片描述在这里插入图片描述—>???重要????关注下方公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源!>

文章来源:https://blog.csdn.net/qq_43471489/article/details/135164795
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。