常见排序算法

常用的排序算法有以下几种:

冒泡排序(Bubble Sort):比较相邻元素,每次将最大(或最小)的元素交换到末尾,重复执行直到整个数组有序。
插入排序(Insertion Sort):将数组分为已排序和未排序两部分,依次将未排序部分的元素插入到已排序部分的适当位置,直到整个数组有序。
选择排序(Selection Sort):每次从未排序的部分选择最小(或最大)的元素,放到已排序部分的末尾,重复执行直到整个数组有序。
快速排序(Quick Sort):选择一个基准元素,将数组分为左右两部分,使得左边的元素都小于等于基准,右边的元素都大于等于基准,然后对左右两部分递归地应用快速排序。
归并排序(Merge Sort):将数组不断地二分为更小的子数组,然后将这些子数组逐个合并并排序,直到整个数组有序。
堆排序(Heap Sort):利用堆数据结构,构建最大堆(或最小堆),然后反复取出堆顶元素并调整堆,直到整个数组有序。
希尔排序(Shell Sort):将整个数组按一定间隔分组,对每个分组应用插入排序,然后逐渐缩小间隔直到为1,最后再进行一次完整的插入排序。
计数排序(Counting Sort):统计数组中每个元素的出现次数,然后根据统计信息将元素放回数组中,以实现排序。
基数排序(Radix Sort):按照元素的位数从低位到高位依次进行排序,可以借助计数排序作为基数排序的子过程。
这些排序算法各有特点,并在不同的场景下有不同的适用性。选择合适的排序算法取决于具体的需求和数据规模。

排序算法

冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法。它通过多次遍历待排序的元素,比较相邻的两个元素并交换位置,使较大的元素逐渐向右移动到数组的末尾,从而实现排序的目的。具体的步骤如下:
从数组的第一个元素开始,依次比较相邻的两个元素。
如果前一个元素大于后一个元素,则交换它们的位置,使较大的元素向右移动。
继续比较下一对相邻元素,重复上述操作,直到遍历到倒数第二个元素(第一轮遍历结束时,最大的元素已经排在了最后)。
重复上述步骤,每次遍历都将待排序部分的最大元素移动到最右边。
当没有发生交换操作时,说明数组已经有序,排序完成。

插入排序

插入排序(Insertion Sort)是一种简单直观的排序算法,它的思想是将数组分为已排序和未排序两部分,逐步将未排序部分的元素插入到已排序部分的合适位置,从而实现排序的目的。具体的步骤如下:

假设数组的第一个元素已经是有序的部分,所以从数组的第二个元素开始遍历。
将当前元素与已排序部分的元素进行比较,找到合适的插入位置。
如果当前元素小于已排序部分的元素,则将已排序部分的元素后移一位,给当前元素腾出插入的位置。
重复步骤2和步骤3,直到找到当前元素的正确插入位置。
将当前元素插入到正确的位置后,继续遍历下一个未排序元素。
重复上述步骤,直到所有的元素都被插入到正确的位置。

选择排序

选择排序(Selection Sort)是一种简单直观的排序算法,它的思想是每次从未排序的部分中选择最小(或最大)的元素,将其与未排序部分的第一个元素交换位置,从而逐步形成已排序的部分。具体的步骤如下:
遍历数组,将当前位置标记为最小(或最大)元素的索引。
从当前位置后面的元素中找到最小(或最大)的元素,并记录其索引。
如果最小(或最大)元素的索引不等于当前位置,则交换当前位置与最小(或最大)元素的位置。
将当前位置后移一位,继续重复步骤2和步骤3,直到遍历完所有元素。

快速排序

快速排序(Quick Sort)是一种常用且高效的排序算法,它采用了分治的思想。该算法首先选择一个基准元素(pivot),然后将数组分为两部分,一部分是小于基准元素的元素,另一部分是大于基准元素的元素,然后对这两部分分别进行递归排序,最终实现整个数组的排序。

具体的步骤如下:
选择一个基准元素(pivot),通常可以选择数组的第一个元素或最后一个元素作为基准。
将数组分为两部分,一部分是小于基准元素的元素,另一部分是大于基准元素的元素。可以通过使用两个指针(left和right)从数组的两端开始遍历,将小于基准的元素放在左边,大于基准的元素放在右边。
对左右两个部分递归执行步骤1和步骤2,直到每个部分只有一个元素或为空。
合并左右两个部分的元素,即将左部分的元素、基准元素和右部分的元素按顺序连接起来。

归并排序

归并排序(Merge Sort)是一种高效的排序算法,它采用了分治的思想。该算法将待排序的数组分割成若干个子数组,然后对每个子数组进行排序,并将已排序的子数组合并成更大的数组,最终实现整个数组的排序。
具体的步骤如下:
将待排序的数组分割成两个子数组,直到每个子数组只有一个元素。
对每个子数组进行递归排序,即继续将子数组分割并排序,直到子数组只有一个元素。
将两个已排序的子数组合并成一个有序的数组。
重复步骤3,直到所有子数组合并成一个完整的有序数组。

堆排序

堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法。它的时间复杂度为O(nlogn),其中n是待排序数组的大小。

堆是一个完全二叉树,可以使用数组来表示。在堆中,每个节点的值都大于等于或小于等于其子节点的值,这被称为最大堆或最小堆性质。在堆排序中,我们通常使用最大堆。

堆排序的基本思想是:

构建最大堆:将待排序的数组看作是一个完全二叉树,并通过从下到上、从右到左的顺序依次调整每个非叶子节点的位置,使得每个节点都满足最大堆性质。
交换元素:将堆顶元素(即最大元素)与堆的最后一个元素交换位置,然后将堆的大小减1,同时保持更新后的堆仍满足最大堆性质。
重复执行步骤2,直到堆的大小为1。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值