十大排序算法总结(持更)

十大排序算法总结

引用

解释排序的意思…(迟更)

一、选择排序算法

1.详解过程(迟更)

流程图

在这里插入图片描述
动态流程图
在这里插入图片描述

2.代码段以解释

public class Sample04 {
    public static void main(String[] args) {
        //1.声明一个数组
        int[] arr = new int[]{8,9,2,6,7,1,4,5,3};
        //2.循环第几轮
       for (int i  = 0; i < arr.length - 1; i++) { //-1 n个数字没有第n轮
           for (int j = i + 1; j < arr.length; j++) {
               if (arr[i] > arr[j]) {
                   swap(arr,i,j);
               }
           }
       }
       print(arr); 
    }
    //[1, 2, 3, 4, 5]
    public static void print(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i == arr.length - 1) {
                System.out.println("]");
            } else {
                System.out.print(", ");
            }
        }
    }
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];![在这里插入图片描述](https://img-blog.csdnimg.cn/20210123232541510.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzE2OTcw,size_16,color_FFFFFF,t_70#pic_center)

        arr[i] = arr[j];
        arr[j] = temp;
    }
}

二、冒泡排序算法

1.详解过程(迟更)

流程图
在这里插入图片描述
动态流程图
在这里插入图片描述

2.代码段及解释

public class Sample05 {
    public static void main(String[] args) {
        int[] arr = new int[]{8,9,2,6,7,1,4,5,3};
        for (int i = 0; i < arr.length - 1; i++) {//-1 表示n个数字只有n-1轮
            for (int j = 0; j < arr.length - 1 - i; j++) {//-1 避免重复比较(当前最大和上一轮最大)(同时防止第1轮溢出)
                if (arr[j] > arr[j + 1]) {
                    swap (arr,j,j+1);
                }
            }
        }
        print(arr);
    }
    public static void print(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i == arr.length - 1) { //等于最后一个角标了
                System.out.println("]");
            } else {
                System.out.print(", ");
            }
        }
    }
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

三、插入排序算法

1.详解过程(迟更)

流程图
在这里插入图片描述

动态流程图在这里插入图片描述

2.代码段及解释

public class Sample06 {
    public static void main(String[] args) {
        int[] arr = new int[]{8,9,2,6,7,1,4,5,3};
        for (int i = 1; i < arr.length; i++) {
            int e = arr[i];
            int j = 0;
            for (j = i; j > 0 && arr[j-1] > e; j--) {
                arr[j] = arr[j - 1];
            }
            arr[j] = e;
        }
        print(arr);
    }
    //[1, 2, 3, 4, 5]
    public static void print(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i == arr.length - 1) {
                System.out.print("]");
            } else {
                System.out.print(", ");
            }
        }
    }
}

四、计数排序算法

1.详解过程(迟更)

流程图
在这里插入图片描述

动态流程图
在这里插入图片描述

2.代码段及解释

public class Sample01 {
    public static void main(String[] args) {
        int[] arr = new int[]{2,3,1,-2,2,7,8,9,12,10,7,5,6,-1,-2,-3,9,8,7};
        //1.找到最大值和最小值
        int min = arr[0];
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        //2.确定桶的个数
        int[] temp = new int[max - min + 1];
        //3.确定对应关系
        //index = number - min
        //number = index + min
        for (int i = 0; i < arr.length; i++) {
            temp[arr[i] - min]++;
        }
        //temp[index] 表示index对应的数字number出现的次数
        int k = 0;
        for (int index = 0; index < temp.length; index++) {
            while (temp[index] != 0) {
                arr[k] = index + min;
                k++;
                temp[index]--;
            }
        }
        print(arr);
    }
    public static void print(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i == arr.length - 1) {
                System.out.print("]");
            } else {
                System.out.print(", ");
            }
        }
    }
}

五、基数排序算法

1.详解过程(迟更)

流程图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
动态流程图
在这里插入图片描述

2.代码段及解释

import java.util.LinkedList;
public class Sample02 {
    public static void main(String[] args) {
        int[] arr = new int[]{2,4,55,86,8,97,101,32,6,2,1,304,64,7,2,9,60};
        //1.找出最大值,判断有几轮
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        int radex = (max + "").length();//给max数字拼一个字符串,取其长度

        //2.创建另一个数组就是十个桶,每个桶是一个LinkedList
        LinkedList<Integer>[] queues = new LinkedList[10];
        for (int i = 0; i < queues.length; i++) {
            queues[i] = new LinkedList<Integer>();
        }

        //3.进行对数字的分类和规整
        /*
        r=0 个位
        r=1 十位
        r=2 百位
        .....
        */
        for (int r = 0; r < radex; r++) {
            //先按照每轮r进行分类
            for (int i = 0; i < arr.length; i++) {
                int index = getIndex(arr[i],r);//获取数字的r位 返回该数字要去的桶的角标0~9
                queues[index].offer(arr[i]);//将把数组arr中按r位的数放在对应的数组queues中
                //offer将指定元素添加到此列表的末尾(最后一个元素)
            }

            //然后再重新规整赋值到arr里
            int k = 0;
            for (int index = 0;index < queues.length; index++) {
                while (!queues[index].isEmpty()) {
                    arr[k++] = queues[index].poll();//poll获取并移除此列表的头(第一个元素) 
                }
            }
        }
        print(arr);
    }
    public static int getIndex(int number, int r) {
        /*
        123   r=0 个位   123 % 10= 3
        123   r=1 十位   12 % 10 =2
        123   r=2 百位   1 % 10 =1
        */
        int index = 0;
        for (int i = 0; i <= r; i++) {
            index = number % 10;
            number /= 10;
        }
        return index;
    }
    public static void print(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i == arr.length - 1) {
                System.out.print("]");
            } else {
                System.out.print(", ");
            }
        }
    }
}

六、希尔排序算法

七、堆排序算法

八、归并排序算法

九、快速排序算法

十、桶排序算法

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值