栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java几种常见的排序算法(复杂度,算法简介,代码实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java几种常见的排序算法(复杂度,算法简介,代码实现)

写在前面:

今天,参考了下方文章,自己手动写了几种常见排序算法的代码。此文非常清晰明了,推荐:

Java的几种常见排序算法 - 小不点丶 - 博客园 (cnblogs.com)

1. 几种常见的排序算法的复杂度

 图片来自上述文章

2. 冒泡排序 2.1 什么是冒泡排序?

基本思想是:

从头开始让相邻的两个元素进行比较,符合条件就交换位置,这样就可以把最大值或者最小值放到数组的最后面了;

接着再从头开始两两比较交换,直到把最大值或者最小值放到数组的倒数第二位(即不需要与最后一位数进行对比).....

以此类推,直到排序完成。

2.2 代码实现

package com.my.demo;

public class BubbleSort {
    public static void main(String[] args) {
        int arr[] = {6, 4, 7, 8, 1};

        System.out.println("排序前:");  //打印排序前数组
        printArr(arr);

        System.out.println("n冒泡排序过程:");
        for(int i=0; i arr[j+1]){  //注意:此代码是实现将最大值放到最后的效果排序
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
            printArr(arr);
        }
        System.out.println("n排序后:");  //打印排序后数组
        printArr(arr);
    }

    public static void printArr(int[] arr){
        for(int k=0; k
2.3 运行结果
排序前:
6 4 7 8 1 

冒泡排序过程:
4 6 7 1 8 
4 6 1 7 8 
4 1 6 7 8 
1 4 6 7 8 
1 4 6 7 8 

排序后:
1 4 6 7 8 

Process finished with exit code 0

3. 选择排序 3.1 什么是选择排序?

选择排序(Selection-sort)是一种简单直观的排序算法,基本思想是:

(1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(第一趟先假设第一个元素就是最小值)。

(2)然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾......

(3)以此类推,直到所有元素均排序完毕。

3.2 代码实现
package com.my.demo;

public class SelectionSort {

    public static void main(String[] args) {
        int arr[] = {9, 3, 8, 1, 5, 2};
        System.out.println("排序前:");  //打印排序前数组
        printArr(arr);

        int min;  //存放每轮(外层循环的)循环的最小值
        int index;  //存放每轮(外层循环的)循环的最小值的索引
        System.out.println("n选择排序过程:");
        for(int i=0; i arr[j]){
                    min = arr[j];
                    index = j;
                }
            }
            //将最小值与本次循环开始设置的假设最小值,进行交换
            //将i前面的数据看成一个排好的队列,i后面的看成一个无序队列。每次只需要未排序部分的最小值,做替换。
            int tmp = arr[i];
            arr[i] = min;
            arr[index] = tmp;

            printArr(arr);
        }
        System.out.println("n选择排序后:");  //打印排序后数组
        printArr(arr);
    }

    public static void printArr(int[] arr){
        for(int k=0; k
3.3 运行结果
排序前:
9 3 8 1 5 2 

选择排序过程:
1 3 8 9 5 2 
1 2 8 9 5 3 
1 2 3 9 5 8 
1 2 3 5 9 8 
1 2 3 5 8 9 
1 2 3 5 8 9 

选择排序后:
1 2 3 5 8 9 

Process finished with exit code 0

4. 插入排序 4.1 什么是插入排序

插入排序是一种简单直观的排序算法,基本思想是:

(1)通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

(2)插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间...

(3)直到所有元素均排序完毕。

4.2 代码实现

package com.my.demo;

public class InsertionSort {

    public static void main(String[] args) {
        int arr[] = {5, 3, 6, 1, 9, 0};

        System.out.println("排序前:");  //打印排序前数组
        printArr(arr);

        System.out.println("n插入排序过程:");
        for(int i=1; i0; j--){  //内层循环,与前面排好序的有序列表比较,如果后面的数据小于前面的则交换
                if(arr[j] < arr[j-1]){   //该第j项比它前面的第j-1个小,则有可能比第j-2个也小,所以先j和j-1互换一次,然后再继续往前比
                    int tmp = arr[j-1];
                    arr[j-1] = arr[j];
                    arr[j] = tmp;
                } else {  //如果第j个已经比第j-1个大了,那肯定比第j-2个往前的数据都大,因为前面j-1个是已经从小到大排好序了的
                    break;  //如果不小于,说明插入完毕,退出内层for循环
                }
            }
            printArr(arr);
        }
        System.out.println("n插入排序后:");  //打印排序后数组
        printArr(arr);
    }

    public static void printArr(int[] arr){
        for(int k=0; k

4.3 运行结果
排序前:
5 3 6 1 9 0 

插入排序过程:
3 5 6 1 9 0 
3 5 6 1 9 0 
1 3 5 6 9 0 
1 3 5 6 9 0 
0 1 3 5 6 9 

插入排序后:
0 1 3 5 6 9 

Process finished with exit code 0

5. 希尔排序 5.1 什么是希尔排序?

希尔排序(Shell's sort)是插入排序的一种,是直接插入排序算法的一种更高版本的改进版本。

基本思想是:

通过间隔多个数据来进行插入排序。

(1)将数组列在一个表中,并对列分别进行插入排序。

(2)重复这过程,不过每次用更长的列(步长更长了,列数更少了)来进行。

(3)最后整个表就只有一列了。

5.2 代码实现

5.3 运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354000.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号