随笔分类 - 算法
关于算法的一些笔记
摘要:快速排序的平均时间复杂度是O(n log n)。 一开始随机挑选一个基准值,这里固定选的是数组第一个元素,然后有左右两个指针,分别向中间开始靠拢,过程中,左指针遇到比基准值大的,那就和右指针交换,相同的右指针也是,左右交替进行,在左右指针相遇的地方,也就是基准值所在的地方,这时候基准值的左侧都比基准
阅读全文
摘要:这次的代码是在一篇博客找到的,忘记是哪个了,所以原主人希望指出转载的话,请联系。 归并排序是用了分治的思想,就是将大问题不断拆分成与原问题相同但是规模更小的问题,当将每个小问题都解决后,大问题自然就解决了。 在排序中,是将数组拆成两部分,然后将这两个部分继续拆分,直到拆成一个,因为一个元素默认就是有
阅读全文
摘要:希尔排序是插入排序的改良版本,插入排序每次比较都会多一个确定元素,导致下一次比较就会多一次小循环,而且当小的元素在数组的靠右时,要将小元素移到左侧,需要比较的次数会很多,那么希尔排序就将本来是相邻元素比较,改为跨元素比较,那么右侧的小元素也会很快来到左侧,减少比较的次数。 假设跨元素的步距是数组长度
阅读全文
摘要:插入排序其实就是为元素确定它的位置。从数组第二个元素开始,它的左边的元素都是有序的,然后为当前元素确定它在左边序列中的位置,也就是找到一个比当前元素小的元素,那么它的右边的位置就是当前元素的位置;每次比较都会多一个元素,比较次数也就多一次,平均时间复杂度是O(n^2)。 1 public class
阅读全文
摘要:从数组第一个元素开始,与剩下元素作比较,找出最小的元素,这是一次大循环;每次需要确定最小元素就会有一个小循环来查找元素,每次大循环中确定一个最小元素,那么每次小循环的次数就少一次,平均是O(n^2)时间复杂度。 1 public class SelectionSort implements IArr
阅读全文
摘要:大循环中,每次与相邻的元素进行比较,确定一个最大元素,最大元素升序右移,一个小循环确定一个最大元素,那么每次小循环的次数也会少一次,平均时间复杂度是O(n^2)。 1 public class BubbleSort implements IArraySort{ 2 3 4 @Override 5 p
阅读全文