当前位置:网站首页 > Java基础 > 正文

java基础语言编程学习排序



冒泡排序:

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. 优点:平均时间复杂度小,适用于大规模数据的排序,效率较高。

版权声明


相关文章:

  • java基础之选择结构2024-11-04 14:34:05
  • web开发技术java基础2024-11-04 14:34:05
  • java基础班和就业班的区别2024-11-04 14:34:05
  • java核心基础203讲解2024-11-04 14:34:05
  • java基础百度云盘2024-11-04 14:34:05
  • java 基础面试 高级开发工程师2024-11-04 14:34:05
  • java程序设计基础教程书2024-11-04 14:34:05
  • 没有任何基础学java从哪开始2024-11-04 14:34:05
  • Java经典程序基础题10道2024-11-04 14:34:05
  • 老**堂java基础2024-11-04 14:34:05