- 博客(5)
- 收藏
- 关注
原创 排序算法之快速排序
快速排序采用分治的思想,是对冒泡排序的一种改进。首先在数组中选取一个数作为pivotkey,将比其小的放在左边,比其大的放在右边,然后对左右两边分别调用快速排序。但是其实现过程有很多种方法,分为两个要点,其一是如何选择pivotkey,可以随机选择、选择两个不同数值中较大的那个或选择首位、中位、末位三者之间的中位数等;其二是如何对数组进行划分,可以从头至尾扫描,将小于中位数的元素与大于中位数的...
2018-03-25 09:59:20
137
原创 排序算法之选择排序
选择排序对于数组a[1:n]需要进行n次遍历,每次遍历找到第i大的元素,将其与第i位元素进行交换后对a[i+1:n]进行处理。每次遍历进行n-i次比较,1或0次交换,时间复杂度为O(n),对初始数据不敏感。 对选择排序进行优化可得到树形选择排序和堆排序。def SelectSort(a): for i in range(len(a)): min = a[i]...
2018-03-24 01:46:22
111
原创 排序算法之希尔排序
希尔排序也称之为递减增量排序,是对插入排序的改进。插入排序一次只能将数据向前移一位,并且对插入下一个数没有提供任何帮助。希尔排序将待排序列按照某个增量(如下图令其为4)分成若干个子序列,分别对每个子序列用插入排序算法进行排序。每进行完一趟排序,增量递减(减1或除以2等)。因此,希尔排序也称缩小增量排序。最后一趟排序时,增量缩小为1,即最后一趟排序相当于直接插入排序。其中,增量的选取对希尔排序算...
2018-03-23 22:13:31
184
原创 排序算法之插入排序
插入排序算法有种递归的思想在里面,它由n-1趟排序组成。对于第i趟排序,即对位置i+1处的元素进行排序时,[1:i]上的元素一定是已经有序的了,接着将第i+1位元素与[1:i]区间内元素进行比较,插入合适的位置。其中,插入过程中可分为两种,一种是边遍历比较边交换位置;一种是找到合适位置后再进行元素移动。下图为第一种插入过程。 插入排序平均需要n2/4次比较和n2/4 次交换。...
2018-03-23 20:44:48
179
原创 排序算法之冒泡排序
冒泡排序是排序算法里面较为简单的一种算法,有升序与降序之分,面试时可问清楚是升序还是降序。 以升序为例,对于数组a[1:n],每次排序处理第1个数至第n-i个数,将其与下一个元素进行比较,较大的数向后移。每次可确定第i大的数,需经过n-i次比较,最少进行0次交换,最多进行n-i次交换。所需时间复杂度为O(n2)。 优化:每次排序前设定flag=1,若该次排序中进行了交换则将flag置为...
2018-03-23 17:54:47
115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人