算法
文章平均质量分 64
ivolcano
努力努力再努力
展开
-
交换类排序之快速排序
#includevoid QuickSort(int R[],int l,int r) //快排{ int i=l,j=r; int temp; if(l<r) { temp=R[l]; //以temp为关键字,也就是最左边的那个数 while(i!=j) //直到i=j为止结束 { //数组中小于temp的元素放在左边,大于temp的元素放右边 wh原创 2016-03-25 21:35:22 · 529 阅读 · 0 评论 -
选择类排序之选择排序
#includevoid SelectSort(int R[],int n){ int i,j,k; int temp; for(i=0;i<n;++i) { k=i; //这个循环是算法的关键,它从无序序列中挑出一个最小的元素 for(j=i+1;j<n;++j) if(R[k]>R[j]) k=j; //下面三句完成最小元素与无序序列第一个元素的原创 2016-03-25 22:02:43 · 334 阅读 · 0 评论 -
设计一个算法,将R中的序列循环左移P个
即将R中的数据由{X0,X1,……,Xn-1}变换为{Xp,Xp+1,……,Xn-1,X0,X1,……,Xp-1}分析:要实现R中序列循环左移P个位置,只需先将R中前P个元素逆置,再将剩下的元素逆置,最后将R中所有的元素再整体做一次逆置操作即可,本题算法描述如下:#include#include# define N 50int main(){ void reverse(int R原创 2016-04-12 22:45:40 · 3982 阅读 · 2 评论 -
题目1018:统计同成绩学生人数
题目描述:读入N名学生的成绩,将获得某一给定分数的学生人数输出。输入:测试输入包含若干测试用例,每个测试用例的格式为第1行:N第2行:N名学生的成绩,相邻两数字用一个空格间隔。第3行:给定分数当读到N=0时输入结束。其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。输出:对每个测试用例,将获得给定分数的学生人数输出。原创 2016-10-12 20:04:31 · 395 阅读 · 0 评论 -
(Hash大数排序)Sort
题目描述:给你n个整数,请按从小到大的顺序输出其中前m大的数。输入:每组测试数据有两行,第一行有两个数n,m(0各不相同的,且大小处于[-500000,500000]的整数。输出:对每组数据按从大到小的顺序输出前m大的数。样例输入:5 33 -35 92 213 -644样例输出:213 92 3思考:在本例中,如果用排序来解决该题,由于待排序数字的数原创 2016-10-12 21:45:04 · 1005 阅读 · 0 评论 -
题目1156:谁是你的潜在朋友(hash)
题目描述: “臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。 首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,…,N,把M本书依次编号为1,2,…,M。同时,按照原创 2016-10-12 22:26:29 · 391 阅读 · 0 评论 -
AVL树,红黑树,B树,B+树,Trie树应用场景简介
AVL树,红黑树,B树,B+树,Trie树应用场景简介 1.AVL树:平衡二叉树,一般是用平衡因子差值决定并通过旋转来实现,左右子树树高差不超过1,那么和红黑树比较它是严格的平衡二叉树,平衡条件非常严格(树高差只有1),只要插入或删除不满足上面的条件就要通过旋转来保持平衡。由于旋转是非常耗费时间的。我们可以推出AVL树适合用于插入删除次数比较少,但查找多的情况。原创 2016-12-19 22:05:30 · 603 阅读 · 0 评论 -
leetcode之sort-list
题目描述 Sort a linked list in O(n log n) time using constant space complexity.因为题目要求复杂度为O(nlogn),故可以考虑归并排序的思想。 归并排序的一般步骤为: 1)将待排序数组(链表)取中点并一分为二; 2)递归地对左半部分进行归并排序; 3)递归地对右半部分进行归并排序; 4)将两个半部分进行合并(merg原创 2017-03-04 14:14:15 · 225 阅读 · 0 评论 -
归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程: 归并: 1.比较a[i]和a[j]的大小; 2.若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i原创 2017-09-17 20:25:40 · 237 阅读 · 0 评论