排序
小麦大大
写写代码纪录生活
展开
-
快速排序
#include <iostream>#include <vector>using namespace std;// 一次快速排序int partition(vector<int> &a, int low, int high){ // 枢轴值(线性表第一个元素作为枢轴值) int key = a[low]; while...原创 2018-08-14 15:57:29 · 129 阅读 · 0 评论 -
快速排序优化
优化点:优化选取中轴元素以上代码target 选取的位置是认定了数组元素的首位,但是若这个数值的大小不在整个数组的中间位置,会大大降低快排的性能。target =array[low] 这句就成了一个潜在的性能瓶颈。因此快速排序的速度还取决于这个target关键元素在数组中的位置。 【改进方法】三数取中法:去三个元素先进行排序,将中间数作为中轴元素,下面的代码选取数组的左、中、右三个数;...原创 2018-12-19 16:15:08 · 208 阅读 · 0 评论 -
双端冒泡排序
要是文艺点的话,可以说是搅拌排序,通俗易懂点的话,就叫“双向冒泡排序”,我想作为码农的话,不可能不知道冒泡排序,冒泡是一个单向的从小到大或者从大到小的交换排序,而鸡尾酒排序是双向的,从一端进行从小到大排序,从另一端进行从大到小排序。#include <iostream>using namespace std;void Swap(int &a, int &...原创 2018-11-11 13:08:28 · 673 阅读 · 0 评论 -
TOP k算法
面试题:算法题 10万次搜索,两两比较找出top100,然后比较次数总次数不超过20万次,不能碎片化申请空间,一次性申请一个大数组作为储存。 下午:索贝科技有限公司 #include <iostream> using namespace std; // 构建大根堆,其中a是第一个非叶子节点,z是节点个数 void HeapAdjust(int ...原创 2018-09-11 14:15:25 · 580 阅读 · 0 评论 -
希尔排序
基本思路希尔排序是”直接插入排序“的改进版,也称为“缩小增量排序”。基本原理:先将待排序的数组元素分成多个序列,然后对每个子序列分别进行直接插入排序,最后再对所有元素进行一次直接插入排序。#include <iostream>using namespace std; void Insert_Sort(int * arr,int n) { ...原创 2018-08-29 08:22:42 · 237 阅读 · 0 评论 -
插入排序
插入排序void Insert_Sort(int * arr,int n) { int out; int in; if(arr==NULL||n<0) { return ; } for(out = 1;out<n;out++) { ...原创 2018-08-29 08:04:52 · 144 阅读 · 0 评论 -
二叉树的镜像(先序遍历)
1、题目2、思路二叉树有0个节点 二叉树有1个节点 二叉树有多个节点(普通二叉树和只有单侧子节点的二叉树) 二叉树有多个节点的思路:前序遍历二叉树的每个节点,如果遍历到的节点有子节点,则交换该节点的两个子节点。当交换完所有非叶子结点的左右节点之后,即得到二叉树的镜像。 struct TreeNode { int val; ...原创 2018-08-16 14:37:00 · 653 阅读 · 0 评论 -
堆排序
预备知识堆是一种特殊的树形数据结构,即完全二叉树。堆分为大根堆和小根堆,大根堆为根节点的值大于两个子节点的值;小根堆为根节点的值小于两个子节点的值,同时根节点的两个子树也分别是一个堆基本思路步骤一:建立大根堆–将n个元素组成的无序序列构建一个大根堆, 步骤二:交换堆元素–交换堆尾元素和堆首元素,使堆尾元素为最大元素;步骤三:重建大根堆–将前n-1个元素组成的无序序列调整为...原创 2018-08-16 04:08:48 · 164 阅读 · 0 评论 -
选择排序
选择排序每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。 排序实例初始关键字 [49 38 65 97 76 13 27 49]第一趟排序后 13 [38 65 97 76 49 27 49]第二趟排序后 13 27 [65 97 76 49 38 49]第三趟排序后 13 27 38 [97 76 49 65 49]第四趟排序...原创 2018-08-14 16:32:58 · 111 阅读 · 0 评论 -
冒泡排序
基本思想(从小到大排序)对于给定的n个元素,从第一个元素开始,依次对相邻的两个元素进行比较,当前面的记录大于后面的元素,交换位置,进行一轮比较和移动后,n个元素中最大的元素位于第n位;然后对前n-1个元素进行第二轮比较……#include<iostream>#include<vector>using namespace std;void BubbleS...原创 2018-08-14 16:24:41 · 114 阅读 · 0 评论 -
归并排序
基本思想归并排序中, “归”代表递归的意思,即递归的将数组通过折半的方式分离为单个数组。 “并”代表合并的意思,即将分开的数据按照从小到大或从大到小的顺序合并。运用分治法进行归并排序的过程如下:void Merge(int a[], int l, int m, int r){ // p指向临时数组 int p = 0; // i指向第一个子表 int i ...原创 2018-08-14 16:06:16 · 107 阅读 · 0 评论 -
堆排序
void Adjust(int * arr, int m, int len){ int left = 2 * m + 1; int right = 2 * m + 2; int max = m; if (left<len&&arr[left]>arr[max]) { max = left; } if (right<len&&...原创 2019-06-17 13:59:31 · 147 阅读 · 0 评论