【java排序】:基本的三种排序方法(冒泡、插入、选择)

文章目录


前言

冒泡排序法

插入排序法

选择排序法

总结


前言

经过一段时间的java学习,我们逐渐掌握语法,那就让我们学一下基本的排序方法吧。谢谢大家的关注,大家的关注才是我持之以恒更新的动力。

基本方法总结:

冒泡排序法:冒泡排序就是比较相邻之间的两个变量,如果第一个比第二个大就交换这两个变量的值,然后所有的变量都这样比较,按照大小进行交换,从而排序完成!

插入排序法:将第一个数作为有序基础数,第二个数和后面的数多作未排序数,从后往前依次扫描,并且找到合适位置插入。

选择排序法:从所有数据中,选择出最小或者最大的数据,然后将这位数据放在首位,依次每次都找最大或者最小数据,再将数据放在排序好的数据后面。


冒泡排序法

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。以升序为例。顺序轮序数组内元素。依次比较两个相邻的元素,如果顺序错误就交换位置。比较过程最大值就像泡泡一样从左往右慢慢浮到最右侧。每轮遍历后右侧元素为最大值。共进行n轮轮序,最终排序完成。

时间复杂度:O(n2)~O(n2)~O(n)  空间复杂度:O(1)

冒泡排序就是比较相邻之间的两个变量,如果第一个比第二个大就交换这两个变量的值,然后所有的变量都这样比较,按照大小进行交换,从而排序完成!

代码:

package com.my.javapackage;

public class Main {
    public static void main(String[] args) {
        Bubble_sort();
    }
    //冒泡排序法
    //冒泡排序就是比较相邻之间的两个变量,如果第一个比第二个大就交换这两个变量的值,
    // 然后所有的变量都这样比较,按照大小进行交换,从而排序完成!
    public static void Bubble_sort(){
        int[] Sort_1 = {4,1,8,2,6,7,3,5};  //创建排序前的数组
        int i,j,k,flag;
        //for循环打印排序前的数组
        System.out.println("进行冒泡排序前的数组值为");
        for (k=0;k< Sort_1.length;k++){
            System.out.print(Sort_1[k]);
        }
        System.out.println(" "); //换行,让交互界面对齐一致好看
        //冒泡排序
        for (i=0;i< Sort_1.length-1;i++){
            for (j=0;j< Sort_1.length-i-1;j++){
                if (Sort_1[j] > Sort_1[j+1]){
                    flag = Sort_1[j];
                    Sort_1[j] = Sort_1[j+1];
                    Sort_1[j+1] = flag;
                }
            }
        }
        //打印排序好的数组
        System.out.println("进行冒泡排序后的数组值为");
        for (k=0;k< Sort_1.length;k++){
            System.out.print(Sort_1[k]);
        }
    }
}

运行结果图:


插入排序法

 插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。直到所有元素遍历完毕,排序结束。

时间复杂度:O(n2)~O(n2)~O(n)  空间复杂度:O(1)

将第一个数作为有序基础数,第二个数和后面的数多作未排序数,从后往前依次扫描,并且找到合适位置插入

代码:

package com.my.javapackage;

public class Main {
    public static void main(String[] args) {
        Insert_sort();
    }
    //插入排序法
    //将第一个数作为有序基础数,第二个数和后面的数当作未排序数,从后往前依次扫描,并且找到合适位置插入
    public static void Insert_sort(){
        int[] Sort_1 = {4,1,8,2,6,7,3,5};  //创建排序前的数组
        int i,j,k,flag;
        //for循环打印排序前的数组
        System.out.println("进行插入排序前的数组值为");
        for (k=0;k< Sort_1.length;k++){
            System.out.print(Sort_1[k]);
        }
        System.out.println(" "); //换行,让交互界面对齐一致好看
        //插入排序
        for (i=0;i<Sort_1.length;i++){
            flag = Sort_1[i];
            j = i;
            while (j > 0 && flag < Sort_1[j - 1]) {
                Sort_1[j] = Sort_1[j - 1];
                j--;
            }

            // 存在比其小的数,插入
            if (j != i) {
                Sort_1[j] = flag;
            }
        }
        //打印排序好的数组
        System.out.println("进行插入排序后的数组值为");
        for (k=0;k< Sort_1.length;k++){
            System.out.print(Sort_1[k]);
        }
    }
}

插入方法中还有一种折半插入方法,更加有意思,对半折,依次比较,大家可以学习了解一下。

运行结果图:


选择排序法

 选择排序(Selection Sort),它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。
    以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

时间复杂度:O(n2)~O(n2)~O(n)  空间复杂度:O(1)

从所有数据中,选择出最小或者最大的数据,然后将这位数据放在首位,依次每次都找最大或者最小数据,再将数据放在排序好的数据后面!

代码:

package com.my.javapackage;

public class Main {
    public static void main(String[] args) {
        Insert_sort();
    }
    //选择排序法
    //从所有数据中,选择出最小或者最大的数据,然后将这位数据放在首位,依次每次都找最大或者最小数据,再将数据放在排序好的数据后面!
    public static void Insert_sort() {
        int[] Sort_1 = {4, 1, 8, 2, 6, 7, 3, 5};  //创建排序前的数组
        int i, j, k, flag;
        //for循环打印排序前的数组
        System.out.println("进行冒泡排序前的数组值为");
        for (k=0;k< Sort_1.length;k++){
            System.out.print(Sort_1[k]);
        }
        System.out.println(" "); //换行,让交互界面对齐一致好看
        for (i = 0; i < Sort_1.length - 1; i++) {
            int max = i;

            for (j = i + 1; j < Sort_1.length; j++) {
                if (Sort_1[j] > Sort_1[max]) {
                    max = j;
                }
            }
            if (i != max) {
                int tmp = Sort_1[i];
                Sort_1[i] = Sort_1[max];
                Sort_1[max] = tmp;
            }
        }

        //打印排序好的数组
        System.out.println("进行插入排序后的数组值为");
        for (k = 0; k < Sort_1.length; k++) {
            System.out.print(Sort_1[k]);
        }
    }
}

运行结果图:


总结

        三种排序方法是最常见的,希望大家自己动手写一写,实践是检验真理的唯一标准!!!除了以上的一些排序方法,还有很多排序方法,例如:希尔排序、快速排序、归并排序、计数排序、基数排序、桶排序、猴子排序(这个特别有意思)等等……

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值