排序讲解及Java实现

本文介绍了四种排序方法:冒泡排序、选择排序、插入排序和计数排序。通过流程和Java代码展示了每种排序算法的工作原理,适用于理解并学习排序算法。
摘要由CSDN通过智能技术生成

大家好,今天给大家介绍几种常见的排序方法,随着学习的深入,写的排序方法会更多。欢迎大家留言点赞!
目录:
1.冒泡排序
2.选择排序
3.插入排序
4.计数排序

1.冒泡排序

冒泡排序最为简单,像冒泡泡一样。有若干个数,例如{1,3,2,1},假如我以升序进行排序,从第一对开始1和3进行比较,前面比后面大就进行交换,这里不用更换,再比较3和2中谁较大,3大就和2交换,然后比较3和1谁大,3比较大,再一次进行交换,进行了一次遍历找出来最大的数排在了最后,此时为{1,2,1,3},由此循环再找出第二大的数,直到找完为止。
流程图如下:
在这里插入图片描述

java code:

import java.util.Arrays;
class BubbleSort{
    public static void main(String []args) {
        int[] arr={2,1,3,4,6,5,7,9,8};
        for(int i=0;i<arr.length-1;i++){//进行依次比较。
            for(int j=i;j<arr.length-1;j++){
                if(arr[j]>arr[j+1]){
                    swap(arr,j,j+1);
                }
            }
        }
        System.out.print(Arrays.toString(arr));
    }
    public static void swap(int[] arr,int i,int j){//进行交换
        int temp=0;
        temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
}

2.选择排序

选择二字说明这个排序过程是选择最大值或者最小值的过程,这里输出一个升序序列,先找出一系列数中的最小值,如{4,2,3,1}先将第一个数作为最小的数,遍历寻找有无更小的数,如果有,就进行交换,先将4与2进行交换,变为{2,4,3,1},此时最小值为2,继续往下找,找到1比2小,将2与1交换,变为{1,4,3,2},循环一次找出一个最小值,继续循环遍历,便可得出排序结果。
流程图如下:
在这里插入图片描述
java code:

import java.util.Arrays;
class SelectSort{
    public static void main(String []args) {
        int[] arr={2,1,3,4,6,5,7,9,8};
        for(int i=0;i<arr.length;i++){//遍历寻找最小元素进行替换
            int min =i;                //先将第一个元素作为最小值
            for(int j=i+1;j<arr.length;j++){//将第二个元素以及后面的数与其比较并交换。
                if(arr[min]>arr[j]){
                    swap(arr,min,j);
                }
            }
        }
        System.out.print(Arrays.toString(arr));
    }
    public static void swap(int[] arr,int i,int j){//两数交换
        int temp=0;
        temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
}

3.插入排序

插入排序,重点在于插入,就像打麻将一样,你刚把牌拿起来后,通常需要根据大小进行排序,将未排序的牌插入已排序的牌中。
思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
实现流程:
(1) 设置监视哨r[0],将待插入记录的值赋值给r[0];
(2) 设置开始查找的位置j;
(3) 在数组中进行搜索,搜索中将第j个记录后移,直至r[0].key≥r[j].key为止;
(4) 将r[0]插入r[j+1]的位置上。
在这里插入图片描述
java code:

import java.util.Arrays;
class InsertSort{
    public static void main(String []args) {
        int[] arr={2,1,3,4,6,5,7,9,8};
        for(int i=0;i<arr.length;i++){//将一个元素插入到已排序的序列中。
            for(int j=i;j>0;j--){
                if(arr[j]<arr[j-1]){
                    swap(arr,j,j-1);
                }else{
                    break;
                }
            }
        }
        System.out.print(Arrays.toString(arr));
    }
    public static void swap(int[] arr,int i,int j){
        int temp=0;
        temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
}

4.计数排序

仅适用于整数,并且待排序中数字最大值于最小值相差不大,否则浪费许多空间。基本思想是,根据需排序的序列的最大值和最小值确定一个范围,利用数组下标来存储元素,数组中的元素代表该元素出现的次数。
java code:

class CountSort{
    public static void main(String []args) {
        int[] arr={2,1,3,4,6,5,7,9,8,8,7};
            //offse=0-1=-1,brr[1]++
       //并以其插值创建新数组用于计数,且原数组与新数组之间的对应角标相差0-min。
        //遍历找到max和min。
        int max=arr[0];
        int min=arr[0];
        for(int i=0;i<arr.length;i++){
            if(arr[i]<min){
                min=arr[i];
            }else if(arr[i]>max){
                max=arr[i];
            }
        }
        int[] brr=new int[max-min+1];
        int offse=0-min;  
        //根据新数组中的下标是原数组中出现的元素,下标对应的元素是该元素出现的次数,
        //注意不能直接打印新数组,打印新数组输出的是下标出现的次数。
        for(int i=0;i<arr.length;i++){
                brr[arr[i]+offse]++;
            }
            System.out.print("[");
        for(int i=0;i<brr.length;i++){
            for(int j=0;j<brr[i];j++){
                System.out.print(i+1+" ");
            }
        }
        System.out.print("]");
    }
}

到此先告一段落。待更。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值