分治基础-二分查找:
二分查找是一种高效的查找算法
先找到数组的中间位置mid,判断
(1)如果要找的数x==a[mid]找到了,mid就是位置
(2)如果要找的教x>a[mid],说明要找的数在后一半,递归在后一半找
(3)如果要找的数x<a[mid],说明要找的数在前一半,递归在前一半找在下标为left~right之间的范围内找数,mid=(left+right)/2当left<=right就一直找,直到找到了,或者left>right(找不到)
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————快速排序:
快速排序是一种高效的排序算法,其基本思想是通过选择一个基准元素,将数组划分为两个子数组,一个包含所有小于基准元素的元素,另一个包含所有大于基准元素的元素,然后递归地对这两个子数组进行快速排序。
快速排序的基本步骤
1.选择基准元素:通常选择数组的第一个元素作为基准元素,但也可以随机选择或使用“三数取中法”来避免最坏情况。
2.分区操作:将数组中的元素根据与基准元素的比较结果进行重新排列,小于基准元素的放在左边,大于基准元素的放在右边。
3.递归排序:对基准元素左右两边的子数组进行递归排序。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
他的优点有:
1.时间复杂度低:平均时间复杂度为O(nlogn),比其他排序算法如冒泡排序、选择排序和插入排序更快。
2.原地排序:不需要额外的存储空间,只需通过交换数组中的元素来实现排序。
3.分治思想:采用分治策略,将问题分解为子问题,简化问题复杂度。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
冒泡排序:
冒泡排序是一种简单的排序算法,其基本思想是通过重复遍历待排序的数列,比较每对相邻元素并在必要时交换它们的位置,直到整个数列有序。它是通过重复走访数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复进行的,直到没有再需要交换的元素为止,这时数列就排序完成了。
步骤:
1.从左到右遍历数列,比较相邻的两个元素。
2.如果第一个元素比第二个元素大,则交换它们的位置。
3.对每一对相邻元素做同样的工作,直到最后一对。
·重复步骤1~3,直到整个数列有序。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
插入排序是一种简单直观的排序算法,其基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。也是一种稳定的算法。
步骤:
插入排序将数组分为已排序区间和未排序区间。初始时,已排序区间只包含数组的第一个元素,未排序区间包含除第一个元素之外的所有元素。然后,从未排序区间取出第一个元素,将它插入到已排序区间的合适位置,使得已排序区间仍然保持有序。这个过程重复进行,直到未排序区间中的所有元素都被插入到已排序区间中,即整个数组排序完成。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
桶排序是一种分块排序算法,其核心思想是将一个数组分到有限数量的桶里,每个桶再分别进行排序
步骤:
1.初始化桶:根据待排序数组的取值范围,初始化有限数量的桶。
2.分配元素到桶中:遍历待排序数组,根据元素的大小确定每个元素所属桶的位置,并将其放入相应的桶中。
3.对每个桶中的数字进行排序:可以使用其他排序算法,如插入排序、快速排序等,对每个桶中的数字进行排序。
4.合并所有桶中的数字:按顺序将所有桶中的数字合并,得到最终有序数组。