十大排序算法

这是关于十大排序算法的理解


1.选择排序

  • 首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。

2.插入排序

  • 从数组的第二个元素开始抽取元素,与和它相邻的左边第一个元素比较,如果该元素比抽取的元素大,那么继续向左边依次比较,知道找到比该元素小的,然后将抽取元素插入到该元素右边
  • 继续选取数组的第2、3…到n个元素,依次重复上诉步骤,选择合适的位置插入。

3.冒泡排序

  • 比较数组的第1、2号元素,if 1>2 ,则交换两个元素的位置。
  • 接着比较2、3号元素,if 2>3,则交换两个元素的位置。
  • 对后续的每一对相邻元素做同样的操作,则一趟遍历下来,最右边的数,一定是最大的。
  • 除去刚才我们已经排好的最后一位元素,对其他元素做同样的操作,不断重复,直至排序完成。

4.希尔排序

  • 这是对插入排序的优化版,交换不相邻的元素已对数组的局部进行排序。
  • 先让数组中间隔为L的元素排序,一开始可视为L=n/2。
  • 例 [0,4] 、 [1,5] 、[2,6] 、 [3,7] 、[4,8]号元素
  • 然后缩短数组间隔L的大小,L=4/n;直至L=1时,数组即为有序。

5.归并排序

  • 对于一个大的无序数组,拆分成两个小的数组,然后对这两个数组分别排序,然后合并即为一个有序数组。
  • 通过递归的方式,2分4,4分8,直至数组大小为1,那么此时数组即为有序。
  • 然后将数组大小为1的合并为2,2合4…最终组成完成数组。

6.快速排序

  • 从数组中选择一个元素,作为中轴元素,小于该元素的放到其左边,大于放到右边
  • 这样就将数组分成了不包含中轴元素的两个小的数组
  • 然后使用递归的方式,令中轴元素的左边的数组和右边的数组进行同样操作,当数组大小为1时,即数组为有序。

7.堆排序

  • 堆的元素为一个最值,可以是最小值,也可是一个最大值。
  • 堆排序即将堆顶元素与最后一个元素交换,交换后破坏了堆的特性,令除最后一个元素的其他元素组成新堆。
  • 然后令堆顶元素与最后第二个元素交换…直至只剩一个元素时,此时数组即为有序。

8.计数排序

  • 适用于数组最大和最小值相差不大的数组。
  • 建立一个大小为Max-Min+1的临时数组。
  • 将数组元素作为数组的下标,然后用临时数组统计该元素出现的次数。
  • 最后将临时数组统计的数据从大到小汇总,此时数组为有序。
    这里为我用Axure简单绘制的一张图,为了方便理解

9.桶排序

  • 将数组分成多个区间,每个区间对应一个桶。
  • 例如63个数字,可分为0-9这样十个桶,将对应区间的数字放到对应的桶中,在对桶中的数字进行排序。
  • 可以使用归并、或者快排之类的。
  • 这样每个桶中的元素都是有序的,在进行合并。

图片来自百度百科

图片来自百度百科

10.基数排数

  • 先以个位数的大小来对数据进行排序,接着以十位数的大小来进行排序,接着以百位数的大小……
  • 排到最后,就是一组有序的元素了。不过,他在以某位数进行排序的时候,是用“桶”来排序的。
  • 由于某位数(个位/十位….,不是一整个数)的大小范围为0-9,所以我们需要10个桶,然后把具有相同数值的数放进同一个桶里,之后再把桶里的数按照0号桶到9号桶的顺序取出来,这样一趟下来,按照某位数的排序就完成了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值