- 冒泡排序
从序列的一端开始往另一端冒泡,依次比较相邻的两个数的大小。代码实现如下
| void sort(vector<int>& vec) { |
| for (int i = 0; i < vec.size() - 1; ++i) { |
| for (int j = 0; j < vec.size() - i - 1; ++j) { |
| int tem; |
| if (vec[j] > vec[j + 1]) |
| swap(vec[j], vec[j + 1]); |
| } |
| } |
| } |
时间复杂度为O(n2),空间复杂度O(1)
还可以进一步对冒泡排序进行优化,当进行一轮交换操作之后,如果没有两个逆序对,则证明序列此时已经有序,退出循环即可。代码如下
| void sort(vector<int>& vec) { |
| for (int i = 0; i < vec.size() - 1; ++i) { |
| bool flag = true; |
| for (int j = 0; j < vec.size() - i - 1; ++j) { |
| int tem; |
| if (vec[j] > vec[j + 1]) { |
| flag = false; |
| swap(vec[j], vec[j + 1]); |
| } |
| } |
| if (flag) |
| break; |
| } |
| } |
- 选择排序
遍历数组,每次挑选出最大的放到数组末尾,代码如下
| void sort(vector<int>& vec) { |
| for (int i = 0; i < vec.size(); ++i) { |
| int min = i; |
| for (int j = i; j < vec.size(); ++j) { |
| if (vec[j] < vec[min]) { |
| min = j; |
| } |
| } |
| swap(vec[i], vec[min]); |
| } |
| } |
时间复杂度为O(n2),空间复杂度O(1)
| void sort(vector<int>& vec) { |
| for (int i = 1; i < vec.size(); ++i) { |
| int val = vec[i]; |
| int j; |
| for (j = i - 1; j >= 0; --j) { |
| if (vec[j] < val) { |
| break; |
| } |
| vec[j + 1] = vec[j]; |
| } |
| vec[j + 1] = val; |
| } |
| } |
下标i将数组分为两部分,i之前的数组已经有序,将vec[i]
在[0,i−1]范围内寻找合适位置进行插入。时间复杂度也为O(n2)
| void mergesort(vector<int>& arr, int left, int right) { |
| if (left >= right) |
| return; |
| int mid = (right - left) / 2 + left; |
| mergesort(arr, left, mid); |
| mergesort(arr, mid + 1, right); |
| merge(arr, left, mid, right); |
| } |
| void merge(vector<int>& arr, int left, int mid, int right) { |
| vector<int> nums(right - left + 1); |
| |
| int lo = left, hi = mid + 1; |
| int index = 0; |
| |
| while (lo <= mid && hi <= right) { |
| if (arr[lo] <= arr[hi]) |
| nums[index++] = arr[lo++]; |
| else |
| nums[index++] = arr[hi++]; |
| } |
| |
| while (lo <= mid) { |
| nums[index++] = arr[lo++]; |
| } |
| |
| while (hi <= right) { |
| nums[index++] = arr[hi++]; |
| } |
| |
| for (int i = 0; i < nums.size(); ++i) { |
| arr[i + left] = nums[i]; |
| } |
| } |
未完待续...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!