
数据结构&常用算法
理想照耀心灵丶
宁静在心,云霞入梦。
展开
-
冒泡排序
冒泡排序是一种稳定的算法,时间复杂度为O(n^2) 原理: 冒泡排序算法的规则如下: (1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。 (2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,最后的元素是最大的数。 (3)针对所有的元素重复以上的步骤,除了最后一个。 (4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 代码实现...原创 2019-04-19 19:58:59 · 120 阅读 · 0 评论 -
快速排序
快速排序是对冒泡排序的一种本质改进,它是不稳定排序。时间复杂度为O(nlogn)。 原理: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。 例子:http://developer.51cto.com/art/201403/430986.htm(很清晰的例子) 代...原创 2019-04-19 20:17:25 · 120 阅读 · 0 评论 -
选择排序
选择排序是不稳定排序,时间复杂度为O(n^2)。 原理: 从n个元素中找到最小的那个元素与首位置上的元素交换,在从n-1个元素中找到最小的与首交换,依次重复。 代码实现 void swap(int *arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } void selectSort...原创 2019-04-19 20:33:24 · 128 阅读 · 0 评论 -
归并排序
归并排序是一种稳定的排序算法,时间复杂度为O(nlogn)。 原理 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,把原始数组分成若干子数组,对每一个子数组进行排序,继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组。 归并排序主要分为两步:分数列(divide),每次把数列一分为二,然后分到只有两个元素的小数列;合数列(Merg...原创 2019-04-20 11:28:36 · 214 阅读 · 0 评论 -
插入排序
插入排序是一种稳定的排序,时间复杂度为O(n^2)。 原理: 对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 1)从第一个元素开始,该元素可以认为已经被排好序; 2)取出下一个元素,在已经排序的元素序列中从后向前扫描; 3)若该元素大于取出的元素,则将该元素移到下一位置; 4)若该元素小于等...原创 2019-04-20 14:20:03 · 125 阅读 · 0 评论