排序,查询
解决常见排序,查询算法
云与尘呀?
这个作者很懒,什么都没留下…
展开
-
数据结构各种排序算法的温习
首先分门别类介绍各种算法的实现,最后汇总比较一下 排序算法 1.插入排序 直接插入排序 A[1…n],从i=2开始,一个一个找,找到A[i]在A[1…i-1]已排序好的位置排序 所以排n-1趟最好O(n),一般是O(n²) 折半插入排序 区别在于,找位置的时候用了二分法,但是注意查找快了,放入数据后的移动次数没有改变 所以还是O(n²) 希尔排序 区别在于每次分组进行直接插入排序,直到只分为一组。...原创 2020-05-07 09:19:48 · 149 阅读 · 0 评论 -
散列,字符串hash初步
散列是一种以空间换时间的算法思想,以整数散列为列,其精髓就在于用其一个整数数组的下标对应操作输入的对象,要查找这个对象,就直接查找其对应的下标里面信息。 举个例子: 随便输入n个数a(0-100),再输入m个数b,查询他们在这n个数中出现了几次? 这个时候我们建立一个101大的整数数组t初始为0,直接以数组下标标识0-100的数,输入a时,令t[a]++就代表那个数查询了,查询的时候也方便,t[b...原创 2020-02-16 15:22:00 · 160 阅读 · 0 评论 -
堆,堆排序
堆是一棵完全二叉树,如果其父亲结点的值均比孩子结点大,称大顶堆,反之称为小顶堆,学过数据结构知道用数组表示完全二叉树最为简便,自然而然,我们这里也就用数组来表示堆。 如果数组是从序号1开始,对一棵完全二叉树,下列点如果存在,则对结点i/2是父亲结点,2i和2i+1是左右孩子结点。 1.堆 以建大顶堆为例: 建堆过程可以通过比赛规则来模拟,两两对决决出一个强者,强者再对决…最后在最顶上的就是最强者,...原创 2020-02-14 16:31:42 · 73 阅读 · 0 评论 -
2-路归并排序的递归实现和非递归实现
2-路归并排序当时考研时在严书上看到的是递归算法,实际上可能非递归算法效率更高,现在把两者都写出来: #include <iostream> #include<algorithm> using namespace std; const int maxn=101; int t[maxn]; void merge(int a[],int l1,int r1,int l2,in...原创 2020-02-13 17:08:14 · 289 阅读 · 0 评论 -
快速排序和随机快速排序
快速排序 严书上的快排是以最左边元素为枢纽的,如下: #include <iostream> #include<algorithm> using namespace std; int Partition(int a[],int left,int right){ int p=a[left]; //传统快排 ...原创 2020-02-13 16:56:02 · 206 阅读 · 0 评论 -
简单选择排序,直接插入排序、冒泡排序
复习一下数据结构中的排序算法,由于这是为算法复试做准备,就不用想学习数据结构的时候讲那么多,直接上代码 1.简单选择排序 void selectsort(int a[],int n) { //简单选择排序 for(int i=0;i<n;i++) { int k=i; for(int j=i+1;j<n;j++) { if(a[j]<...原创 2020-02-13 16:43:02 · 413 阅读 · 0 评论