赞
踩
排序问题一直都是程序工作或面试中的重点,特别是对于排序算法而言,在一些公司的笔试中,手写个冒泡啥的也不足为奇,因此今天抽空整理一下Java语言实现的各类排序算法,互勉学习一下。根据排序的不同方式大概可归为一下五类:
比较排序是一系列排序算法的集合,它们都是使用比较来确定元素之间的相对顺序。比较排序算法的一般思路是:比较两个元素的大小,如果第一个元素比第二个元素大,则交换它们的位置,然后继续比较剩余的元素,直到所有元素都排序完毕。常见的比较排序有冒泡排序、快速排序、选择排序等等等。下面一一介绍:
冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。一次循环找出一个最大的数放在最后。然后开始第二个循环,再次排序找出除了上一次循环的最大数以外的数,(也就是每次找个最大的放在最后,第二次就不包含上次已找出的最大数再次排序寻找,让最大数从后往前依次递减)依此循环直到没有再需要交换,也就是说该数列已经排序完成。
部分排序示例图如下:
java语言实现:
- /**
- * 冒泡排序
- *
- * @param index
- */
- public static void bubbleSort(int[] index) {
- int len = index.length;
- for (int i = 0; i < len; i++) {
- //第二重循环的条件
- for (int j = 0; j < len - i - 1; j++) {
- if (index[j] > index[j + 1]) {
- int temp = index[j];
- index[j] = index[j + 1];
- index[j + 1] = temp;
- }
- }
- }
- }
测试一下1000个随机数的排序时间:
- /**
- * @author young
- * @date 2022/11/26 18:21
- * @description:
- */
- public class SortTest {
- public static void main(String[] args) {
- long startTime = System.currentTimeMillis();
- int[] index = new int[1000];
- Random random = new Random();
- for (int i = 0; i < 1000; i++) {
- index[i] =(int)(random.nextInt()*1000);
- }
- Sort.bubbleSort(index);
- /*排序耗费的时间为:10ms*/
- System.out.println("排序耗费的时间为:"+(System.currentTimeMillis()-startTime)+"ms");
- }
- }
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
这里以每次找最小数为例,部分排序示例图如下:
代码实现如下:
- /**
- * 选择排序
- * @param array
- */
- public static void selectionSort(int[] array) {
- int minIndex;
- int temp;
- for (int i = 0; i < array.length; i++) {
- minIndex = i;
- for (int j = i + 1; j < array.length; j++) {
- if (array[j] < array[minIndex]) {
- //找到最小数并保存index的位置
- minIndex = j;
- }
- }
- temp = array[minIndex];
- array[minIndex] = array[i];
- array[i] = temp;
- }
- }
测试一下效率:
- /**
- * @author young
- * @date 2022/11/26 18:21
- * @description:
- */
- public class SortTest {
- public static void main(String[] args) {
- long startTime = System.currentTimeMillis();
- int[] index = new int[1000];
- Random random = new Random();
- for (int i = 0; i < 1000; i++) {
- index[i] =(int)(random.nextInt()*1000);
- }
- //选择排序效率测试
- Sort.selectionSort(index);
- /*排序耗费的时间为:3ms*/
- System.out.println("排序耗费的时间为:"+(System.currentTimeMillis()-startTime)+"ms");
- }
- }
比冒泡更快
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。