
算法:排序
常用排序算法的思想和应用场景
z_stand
远离颠倒梦想,究竟涅槃
展开
-
计数排序 算法
算法思路统计待排序数列中每个数字出现的次数入数据结构的过程其实就是排序的过程最后再按照统计结果覆盖原序列就行了PS: 前提条件是知道排序元素的范围算法实现void count(vector<int> &arr, int range) { vector<int> count(range+1,0); for (int i = 0;i < arr...原创 2020-02-11 20:11:12 · 190 阅读 · 0 评论 -
归并排序 算法
算法思路将一个数列不断拆分为子序列,直到只剩下0或者1个元素再将子序列按顺序合并为原来数列的大小,完成排序代码实现//合并两个有序数组vector<int> merge_two_sort(vector<int> &arr1, vector<int> &arr2) { vector<int> result; int i...原创 2020-02-11 14:59:13 · 221 阅读 · 0 评论 -
堆排序 算法
算法思路待排序元素按照大小,在二叉树位置上排列构造最大堆(最小堆)跟节点元素为所有元素最大的一个每次取构造最大堆完成的根节点,并重新构造最大堆重复以上步骤,直到堆中只剩下一个元素则排序完成算法实现void max_heap(vector<int> &arr, int beg, int end) { int dad = beg; //因为数组下标从0开始,所以s...原创 2020-02-11 14:39:57 · 219 阅读 · 0 评论 -
选择排序 算法
算法思路维护一段有序数列,同时遍历待排序数列,找到最小的元素插入有序数列中重复,直到待排序数列没有剩余元素代码实现void select_sort(vector<int> &arr) { for (int i = 0;i < arr.size(); ++i) { int temp = arr[i]; int index = i; for (int...原创 2020-02-11 14:11:23 · 209 阅读 · 0 评论 -
希尔排序 算法
算法思路插入排序的改进版,选择插入距离远的元素选择一个间距,将序列分成很多子序列并行插入排序降低间距,并重复插入元素,直到间距将为1,完成排序。算法实现void shell_sort(vector<int> &arr, int beg, int gap) {//gap为1时即直接插入排序 for (int i = beg + gap; i< arr.siz...原创 2020-02-11 13:52:48 · 251 阅读 · 0 评论 -
插入排序 算法
算法思路维护一段有序数列同时遍历待排序数列,在有序数列中找到合适的位置插入元素基本代码实现如下:void insertion(vector<int>& arr){ for(int i=1;i<arr.size();i++){ int temp=i; for(int j=i-1;j>=0;j--){//有序序列不断得增加 if(arr[t...原创 2020-02-11 13:28:27 · 169 阅读 · 0 评论 -
快速排序 算法
算法思路序列终任意选择一个数,把序列分为比这个数大和比这个数小的两个子序列不断重复以上步骤(递归)代码实现void partition(vector<int> &arr, int begin , int end) { int ret = arr[begin]; int index = begin + 1;}...原创 2020-02-11 10:52:44 · 179 阅读 · 0 评论 -
冒泡排序 算法
算法思路:从第一个元素开始遍历,比较当前元素和下一个元素的大小不符合,则交换结束最后一个元素,则重新遍历实现:void bubble_sort(vector<int> &arr) { for (int i = 0;i < arr.size() - 1; ++i) {//交换size - 1次 for (int j = 0;j < arr.size...原创 2020-02-10 19:38:41 · 535 阅读 · 0 评论 -
十大排序算法 导图总结
以下为我们经常用到的十大典型排序算法导图,很多设计以及优化的思想值得去参考学习因为代码较多,所以都添加到对应的实现注释中了,相关代码可以从Mind-mapping获取xmind源文件参考文档:基数排序堆排序希尔排序https://blog.youkuaiyun.com/real_lisa/article/details/82685407...原创 2020-01-11 21:22:58 · 292 阅读 · 0 评论