冒泡排序:
1. 思路:重复地遍历待排序数组,每次比较相邻两个元素,如果后面的元素小于前面的元素,则交换它们的位置,因为每次遍历都会确定一个元素的最终位置,所以需要遍历n-1次。
2. 步骤:
① 从数列的第一个元素开始,对相邻的两个元素进行比较。
② 如果前面的元素大于后面的元素,则交换这两个元素的位置。
③ 继续比较下一对相邻元素,直到比较到最后一个元素。
④ 重复以上步骤,每次比较都将最大的元素移动到数列的末尾。
⑤ 直到所有元素都有序为止。
3. 代码的实现:
4. 优点:思想简单易懂,实现容易,程序稳定
5. 缺点:不适合处理大规模数据,有一定的性能浪费
选择排序:
1. 思路:每次从待排序的数据中选择最小(或最大)的元素,放到已排序序列的末尾。
2. 步骤:
① 第1趟比较,从n个记录中找到最小的记录,将它与第1个记录交换位置。
② 第2趟比较,从剩下的n-1个记录中找到最小的记录,将它与第2个记录交换位置。
③ 第3趟比较,从剩下的n-2个记录中找到最小的记录,将它与第3个记录交换位置。
④ 重复以上步骤,直到所有记录都排好序为止。
3. 代码的实现:
4. 优点:实现简单,代码量较少,相对于冒泡排序来说,交换次数较少。
5. 缺点: 时间复杂度较高,在大规模数据排序时效率较低,算法程序比较不稳定。
插入排序:
1. 思路:将一个待排序的元素逐个插入到已经排好序的部分中的适当位置,从而得到一个新的有序序列。
2. 步骤:
① 将待排序序列分为已排序和未排序两部分,初始时已排序部分只包含第一个元素,未排序部分包含剩余的元素。
② 从未排序部分依次取出一个元素,在已排序部分中从后往前进行比较。
③ 如果已排序元素大于待插入元素,则将已排序元素后移一位,留出空位。
④ 重复步骤3,直到找到合适的位置插入待插入元素。
⑤ 将待插入元素放入找到的合适位置。
⑥ 重复步骤2至步骤5,直到所有元素都**入到已排序部分。
3. 代码的实现:
4. 优点:对于小规模数据或部分有序的数据集,插入排序效果较好,算法程序稳定,不需要额外的空间。
5. 缺点:在最坏情况下需要执行大量的比较和交换操作ÿjava基础语言编程学习排序0c;效率较低,插入排序需要不断地比较和交换元素,即使在已经有序的情况下也无法提前结束,导致性能浪费。
希尔排序(改进后的插入排序)
1.思路:将待排序序列分割成若干个子序列,对子序列进行插入排序,然后逐步缩小子序列的间隔,最终完成整个序列的排序。
2.步骤:
① 首先选择一个增量(间隔),通常为序列长度的一半。
② 将序列按照增量分成若干个子序列。
③ 对每个子序列进行插入排序,即从第二个元素开始,逐个与前面的元素比较并插入到正确的位置。
④ 缩小增量,重复步骤2和3,直到增量为1。
⑤ 最后使用增量为1的插入排序将整个序列排序。
3.代码的实现:
4. 优点:相对于插入排序来说,在大规模数据排序时效率更高,比较和交换的次数较少。
5. 缺点:增量序列的选择会影响排序的性能,不同的增量序列可能导致不同的时间复杂度,实现代码相对复杂,并且算法程序不稳定。
快速排序:
1. 思路:通过一趟排序将待排序序列分割成独立的两部分,其中一部分的所有元素都小于另一部分的所有元素,然后再递归地对这两部分进行排序,以达到整个序列有序的目的。
2. 步骤:
① 选择一个基准元素(通常为第一个或最后一个元素),将序列分成两个子序列。
② 遍历整个序列,将比基准元素小的元素放在一个新的数组中,将比基准元素大的元素放在另一个新的数组中,相等的元素可以放在任意一边。
③ 对两个新的数组分别重复步骤1和步骤2,直到每个子序列只剩一个元素或为空。
④ 将所有子序列按顺序合并起来即可得到有序序列。
3. 代码的实现:
4. 优点:平均时间复杂度小,适用于大规模数据的排序,效率较高。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/20047.html