
数据结构于算法
南窗客斯黄
学Python,找知了课堂
展开
-
C++循环双端队列
要理解循环双端队列,必须将这个名词分开来理解。首先是循环队列,循环对列的top指针指向第一个插入队列的元素,rear指针指向后面插入的元素。并且为了避免“假溢出”,top指针一般指向当前元素的下一个元素,而rear指针则指向当前插入的元素。然后是双端队列,双端队列是在队列的基础之上,头尾都可以进行操作的线性表,也就是说可以在头尾进行删除和插入操作。最后再把这两个概念结合起来,你就能理解原创 2013-09-23 22:24:03 · 2839 阅读 · 0 评论 -
C++循环链表实现约瑟夫问题
约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”)据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3原创 2013-09-24 16:17:19 · 3098 阅读 · 0 评论 -
C++排序之快速排序(2)
// QuickSort.cpp : 定义控制台应用程序的入口点。///*快速排序(一趟):1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将值为key的项与A[j]交换;4)从i开始向后搜索,即由前开始向后搜索(i++原创 2013-09-24 21:03:19 · 950 阅读 · 0 评论 -
C++排序之插入排序(4)
// InsertSort.cpp : 定义控制台应用程序的入口点。///*插入排序:一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:⒈ 从第一个元素开始,该元素可以认为已经被排序⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置⒌ 将新原创 2013-09-25 10:13:34 · 1339 阅读 · 0 评论 -
C++排序之希尔排序(5)
// ShellSort.cpp : 定义控制台应用程序的入口点。///*希尔排序:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。平均时间原创 2013-09-25 10:50:06 · 1115 阅读 · 0 评论 -
C++排序之堆排序(6)
// HeapSort.cpp : 定义控制台应用程序的入口点。///*堆排序:堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。(1)用大根堆排序的基本思想① 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到原创 2013-09-25 12:29:33 · 967 阅读 · 0 评论 -
各个排序的稳定与非稳定分析
(1)冒泡排序冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。(2)选择排序选择排序是给每个位置选择当前元素最小的转载 2013-09-22 16:11:20 · 905 阅读 · 0 评论 -
C++排序之冒泡排序(1)
// BubbleSort.cpp : 定义控制台应用程序的入口点。///*冒泡排序:相信大家再熟悉不过了。但是现在面试,只有从最简单的写起,一个一个的分析。算法描述:从第0个元素开始,依次往下两两进行比较,如果前面的比后面的大,则把这两个元素交换位置,这样一轮下来最大的元素肯定是在最后了。然后又从0开始,循环到倒数第二个,一直这样循环下去。所以,第一层的循环次数是n-1,第二层的循环原创 2013-09-24 19:44:54 · 1255 阅读 · 0 评论 -
C++排序之选择排序(3)
// SelectSort.cpp : 定义控制台应用程序的入口点。///*选择排序:对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了原创 2013-09-25 09:35:50 · 1088 阅读 · 0 评论