常见排序算法
选择排序
| void selectSort(vector<int>& array) |
| { |
| size_t length = array.size(); |
| int i, j; |
| int min; |
| int t; |
| for (i = 0; i < length; i++) |
| { |
| min = i; |
| for (j = i + 1; j < length; j++) |
| { |
| if (array[j] < array[min]) |
| min = j; |
| } |
| if (min != i) |
| { |
| t = array[min]; |
| array[min] = array[i]; |
| array[i] = t; |
| } |
| } |
| } |
插入排序
| void insertSort(vector<int>& array) |
| { |
| size_t length = array.size(); |
| for (int i = 1; i < length; i++) |
| { |
| if (array[i - 1] > array[i]) |
| { |
| int tmp = array[i]; |
| int j = i - 1; |
| while (j >= 0 && array[j] > tmp) |
| { |
| array[j + 1] = array[j]; |
| j -= 1; |
| } |
| array[j + 1] = tmp; |
| } |
| } |
| } |
希尔排序
| void shellSort(vector<int>& array) |
| { |
| size_t length = array.size(); |
| for (int step = length / 2; step > 0; step /= 2) |
| { |
| for (int i = step; i < length; i++) |
| { |
| if (array[i - step] > array[i]) |
| { |
| int tmp = array[i]; |
| int j = i - step; |
| while (j >= 0 && array[j] > tmp) |
| { |
| array[j + step] = array[j]; |
| j -= step; |
| } |
| array[j + step] = tmp; |
| } |
| } |
| } |
| } |
归并排序
| void mergeSort(vector<int> &array, const int &start, const int &end, vector<int> &tmp) |
| { |
| if (start >= end) |
| return; |
| int mid = start + (end - start + 1) / 2; |
| mergeSort(array, start, mid - 1, tmp); |
| mergeSort(array, mid, end, tmp); |
| int p1 = start; |
| int p2 = mid; |
| int pos = start; |
| while (p1 < mid || p2 <= end) |
| { |
| if (p1 == mid) |
| { |
| while (p2 <= end) |
| tmp[pos++] = array[p2++]; |
| } |
| else if (p2 > end) |
| { |
| while (p1 < mid) |
| tmp[pos++] = array[p1++]; |
| } |
| else |
| { |
| if (array[p1] < array[p2]) |
| tmp[pos++] = array[p1++]; |
| else |
| tmp[pos++] = array[p2++]; |
| } |
| } |
| for (int i = start; i <= end; i++) |
| array[i] = tmp[i]; |
| } |
快速排序
| inline void quickSort(vector<int>& array, const int &left, const int & right) |
| { |
| if (left >= right) |
| return; |
| |
| int tmp = array[left]; |
| int p1 = left; |
| int p2 = right; |
| |
| while (p1 != p2) |
| { |
| while (array[p2] >= tmp && p1 < p2) |
| --p2; |
| while (array[p1] <= tmp && p1 < p2) |
| ++p1; |
| if (p1 < p2) |
| { |
| int t = array[p1]; |
| array[p1] = array[p2]; |
| array[p2] = t; |
| } |
| } |
| |
| array[left] = array[p1]; |
| array[p1] = tmp; |
| |
| quickSort(array, left, p1 - 1); |
| quickSort(array, p1 + 1, right); |
| } |
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现