[面试算法] 排序算法
来源:互联网 发布:软件编程软件 编辑:程序博客网 时间:2024/06/06 08:35
快速排序:
int partion(vector<int> &nums, int begin, int end){int x = nums[end], i = begin - 1;for (int j = begin; j < end; j++){if (nums[j] <= x){swap(nums[++i], nums[j]);}}swap(nums[++i], nums[end]);return i;}void quickSort(vector<int> &nums,int begin,int end){if (begin < end){int q = partion(nums, begin, end);quickSort(nums, begin, q - 1);quickSort(nums, q + 1, end);}}
归并排序:
void merge(vector<int> &nums, int begin, int end, int mid){vector<int> temp(end - begin + 1);int i = begin, j = mid + 1, k = 0;while (i <= mid && j <= end){if (nums[i] <= nums[j]){temp[k++] = nums[i++];}else{temp[k++] = nums[j++];}}while (i <= mid){temp[k++] = nums[i++];}while (j <= end){temp[k++] = nums[j++];}for (int x = begin; x <= end; x++){nums[x] = temp[x - begin];}}void mergeSort(vector<int> &nums, int begin, int end){if (begin < end){int mid = (begin + end) >> 1;mergeSort(nums, begin, mid);mergeSort(nums, mid + 1, end);merge(nums, begin, end, mid);}}
堆排序:
void HeapAdjust(vector<int> &nums, int start, int end){int large = start, l = start * 2 + 1, r = start * 2 + 2;if (l<end && nums[l]>nums[large]) large = l;if (r<end && nums[r]>nums[large]) large = r;if (large != start){swap(nums[start], nums[large]);HeapAdjust(nums, large, end);}}void HeapSort(vector<int> &nums){int len = nums.size();for (int i = len / 2 - 1; i >= 0; i--)HeapAdjust(nums, i, len);for (int i = len - 1; i > 0; i--){swap(nums[i], nums[0]);HeapAdjust(nums, 0, i);}}
0 0
- [面试算法] 排序算法
- 面试-排序算法
- 排序算法 面试 JAVA
- 面试常用排序算法
- 算法--排序--面试总结
- 【面试】八大排序算法
- 面试常见排序算法
- 面试排序算法总结
- 面试常用排序算法
- 【面试】排序算法
- 面试算法之排序算法集锦
- 面试算法之排序算法集锦
- 面试算法之排序算法集锦
- 面试算法之排序算法集锦
- 面试算法之排序算法集锦
- 面试常见算法-排序查找算法
- 面试常见算法-排序查找算法
- 面试算法之排序算法集锦
- 禁止百度云管家偷偷上传的设置方法
- mysql 解决中文乱码
- 忘记带门禁
- GeoServer+PostGIS发布图层
- 初识 PHP
- [面试算法] 排序算法
- Android studio协同SVN配置和上传、检出
- mysql批量删除数据表
- MFC打开已有的excel文件,并编辑,保存
- C++ 工厂方法设计模式的学习 (Boolan学习笔记第12周)
- ITK图像配准01-学习
- 登录远程服务器出现安全链接问题-java插件支持问题
- 个人网站导航
- label和input放置在同一行,并且设置占比