当前位置:   article > 正文

Java语言实现常用的十种排序算法_java 排序算法

java 排序算法

排序问题一直都是程序工作或面试中的重点,特别是对于排序算法而言,在一些公司的笔试中,手写个冒泡啥的也不足为奇,因此今天抽空整理一下Java语言实现的各类排序算法,互勉学习一下。根据排序的不同方式大概可归为一下五类:

比较排序(Comparison Sorting)

比较排序是一系列排序算法的集合,它们都是使用比较来确定元素之间的相对顺序。比较排序算法的一般思路是:比较两个元素的大小,如果第一个元素比第二个元素大,则交换它们的位置,然后继续比较剩余的元素,直到所有元素都排序完毕。常见的比较排序有冒泡排序、快速排序、选择排序等等等。下面一一介绍:

冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。一次循环找出一个最大的数放在最后。然后开始第二个循环,再次排序找出除了上一次循环的最大数以外的数,(也就是每次找个最大的放在最后,第二次就不包含上次已找出的最大数再次排序寻找,让最大数从后往前依次递减)依此循环直到没有再需要交换,也就是说该数列已经排序完成。

部分排序示例图如下:

java语言实现:

  1. /**
  2. * 冒泡排序
  3. *
  4. * @param index
  5. */
  6. public static void bubbleSort(int[] index) {
  7. int len = index.length;
  8. for (int i = 0; i < len; i++) {
  9. //第二重循环的条件
  10. for (int j = 0; j < len - i - 1; j++) {
  11. if (index[j] > index[j + 1]) {
  12. int temp = index[j];
  13. index[j] = index[j + 1];
  14. index[j + 1] = temp;
  15. }
  16. }
  17. }
  18. }

测试一下1000个随机数的排序时间:

  1. /**
  2. * @author young
  3. * @date 2022/11/26 18:21
  4. * @description:
  5. */
  6. public class SortTest {
  7. public static void main(String[] args) {
  8. long startTime = System.currentTimeMillis();
  9. int[] index = new int[1000];
  10. Random random = new Random();
  11. for (int i = 0; i < 1000; i++) {
  12. index[i] =(int)(random.nextInt()*1000);
  13. }
  14. Sort.bubbleSort(index);
  15. /*排序耗费的时间为:10ms*/
  16. System.out.println("排序耗费的时间为:"+(System.currentTimeMillis()-startTime)+"ms");
  17. }
  18. }

选择排序(Selection Sort)

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

这里以每次找最小数为例,部分排序示例图如下:

代码实现如下:

  1. /**
  2. * 选择排序
  3. * @param array
  4. */
  5. public static void selectionSort(int[] array) {
  6. int minIndex;
  7. int temp;
  8. for (int i = 0; i < array.length; i++) {
  9. minIndex = i;
  10. for (int j = i + 1; j < array.length; j++) {
  11. if (array[j] < array[minIndex]) {
  12. //找到最小数并保存index的位置
  13. minIndex = j;
  14. }
  15. }
  16. temp = array[minIndex];
  17. array[minIndex] = array[i];
  18. array[i] = temp;
  19. }
  20. }

测试一下效率:

  1. /**
  2. * @author young
  3. * @date 2022/11/26 18:21
  4. * @description:
  5. */
  6. public class SortTest {
  7. public static void main(String[] args) {
  8. long startTime = System.currentTimeMillis();
  9. int[] index = new int[1000];
  10. Random random = new Random();
  11. for (int i = 0; i < 1000; i++) {
  12. index[i] =(int)(random.nextInt()*1000);
  13. }
  14. //选择排序效率测试
  15. Sort.selectionSort(index);
  16. /*排序耗费的时间为:3ms*/
  17. System.out.println("排序耗费的时间为:"+(System.currentTimeMillis()-startTime)+"ms");
  18. }
  19. }

比冒泡更快

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/462165
推荐阅读
相关标签