数据结构与算法
文章平均质量分 50
微毂
这个作者很懒,什么都没留下…
展开
-
一. 冒泡排序(BubbleSort)
一. 冒泡排序(BubbleSort)https://segmentfault.com/a/1190000014598420https://www.runoob.com/w3cnote/bubble-sort.html基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。过程:比较相邻的两个数据,如果第二个数小,就交换位置。从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。继续重复上述过程,依次将第2.3…n-1个最小数排好位置。冒原创 2020-09-18 11:26:34 · 468 阅读 · 0 评论 -
二. 选择排序(SelctionSort)
二. 选择排序(SelctionSort)基本思想:第1趟,在待排序记录r1 ~ r[n]中选出最小的记录,将它与r1交换;第2趟,在待排序记录r2 ~ r[n]中选出最小的记录,将它与r2交换;以此类推,第i趟在待排序记录r[i] ~ r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。寻找最小位数的序号,排在第一位,与冒泡不同的是,选择是在找到最小值后进行调换位置,把最小值排在前面,冒泡是两两比较,只要小两个就立马换位置可以理解为选择排序是把,最小的找出来,放在前面原创 2020-09-18 11:31:45 · 127 阅读 · 1 评论 -
三. 插入排序(Insertion Sort)
三. 插入排序(Insertion Sort)基本思想: 在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。# 插入排序list1 = [7,3,5,2,6]def insert_sort(lists): # 列表长度 count = len(lists) for i in range(1, count): # 100 1-99 0-99 key = list原创 2020-09-18 13:35:11 · 129 阅读 · 1 评论 -
四. 希尔排序(Shell Sort)
四. 希尔排序(Shell Sort)前言: 数据序列1: 13-17-20-42-28 利用插入排序,13-17-20-28-42. Number of swap:1;数据序列2: 13-17-20-42-14 利用插入排序,13-14-17-20-42. Number of swap:3;如果数据序列基本有序,使用插入排序会更加高效。基本思想: 在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行原创 2020-09-18 13:44:22 · 180 阅读 · 1 评论 -
五. 快速排序(Quicksort)
五. 快速排序(Quicksort)通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。基本思想:(分治,类似于二分法)先从数列中取出一个数作为key值(对比的标准);将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;对左右两个小数列重复第二步,直至各区间只有1个数。快速排序使用分治法(Divide and conquer)策略原创 2020-10-10 13:44:00 · 303 阅读 · 1 评论 -
七、堆排序(HeapSort)
七、堆排序(HeapSort)基本思想:图示: (88,85,83,73,72,60,57,48,42,6)Heap Sort平均时间复杂度:O(NlogN)由于每次重新恢复堆的时间复杂度为O(logN),共N - 1次重新恢复堆操作,再加上前面建立堆时N / 2次向下调整,每次调整时间复杂度也为O(logN)。二次操作时间相加还是O(N * logN)。def adjust_heap(lists, i, size): lchild = 2 * i + 1 rchild =原创 2020-10-10 14:28:11 · 114 阅读 · 1 评论 -
八、基数排序(RadixSort)
八、基数排序(RadixSort)BinSort基本思想: BinSort想法非常简单,首先创建数组A[MaxValue];然后将每个数放到相应的位置上(例如17放在下标17的数组位置);最后遍历数组,即为排序后的结果。图示:BinSort问题: 当序列中存在较大值时,BinSort 的排序方法会浪费大量的空间开销。RadixSort基本思想: 基数排序是在BinSort的基础上,通过基数的限制来减少空间的开销。过程:过程1过程2(1)首先确定基数为10,数组的长度也就是10.每原创 2020-10-10 14:30:38 · 200 阅读 · 1 评论 -
九、计数排序
九、计数排序:计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。1. 计数排序的特征当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。例如:计数排序是用来排序0到原创 2020-10-10 14:33:53 · 142 阅读 · 0 评论 -
六、归并排序(Merge Sort)
六、归并排序(Merge Sort)归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如原创 2020-10-10 14:24:42 · 299 阅读 · 1 评论
分享