冒泡排序(相邻比较):
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
选择排序(找最小):
- 首先在待排序序列中找到最小元素,存放到序列的起始位置
- 再从剩余未排序元素中继续寻找最小元素,放到已排序序列的末尾
- 以此类推,直到所有元素均排序完毕。
插入排序(从第一个开始排,已排序部分123 未排序部分5896):
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5
快速排序(挑选一个元素,分左右两个区域,大于该元素的放右边,小于该元素的放左边):
- 从数列中挑出一个元素,称为“基准”(pivot),通常选择第一个或最后一个元素。
- 扫描数列,以基准元素为比较对象,把数列分成两个区,小于基准元素的移动到基准元素前面,大的移到后面,相等的前后都可以。分区完成之后,基准元素就处于数列的中间位置。
- 再用同样的方法,递归地排序划分的两个区。
在分区过程中,为了不使用额外的空间,左右同时扫描基准之外的元素,在得到一个左边大于基准,右边小于基准的时候,把他们两个进行交换。
二分查找(找出中间位置,给定一个值与中间值比较,该值大于中间值就取右边,否则取左边):
假设我们的数组是一个递增的数组,首先我们需要找到数组的中间位置.
一。要知道中间位置就需要知道起始位置和结束位置,然后取出中间位置的值来和我们的值做对比。
二。如果中间值大于我们的给定值,说明我们的值在中间位置之前,此时需要再次二分,因为在中间之前,所以我们需要变的值是结束位置的值,此时结束位置的值应该是我们此时的中间位置。
三。反之,如果中间值小于我们给定的值,那么说明给定值在中间位置之后,此时需要再次将后一部分的值进行二分,因为在中间值之后,所以我们需要改变的值是开始位置的值,此时开始位置的值应该是我们此时的中间位置,直到我们找到指定值。
四。或者中间值等于最初的起始位置,或结束位置(此时说明给定值未找到),下面我们来用代码实现~