常见排序:冒泡排序、快速排序、归并排序、直接插入排序、希尔排序、选择排序、堆排序

本文详细介绍了七种常见的排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序和归并排序。每种算法都有原理说明和示例代码,帮助理解其工作过程。
摘要由CSDN通过智能技术生成

常见的排序算法可分为以下四种七类:
在这里插入图片描述
一、直接插入排序:
将整列需要排序的数字分为有序区间和无序区间,每次从无序区间取出一个数,插入到有序区间里。
【例】
原始序列:3 8 5 2 7
因为单独的一个数字是有序的,所以第一次有序区间只有数字3,无序区间从数字8开始一直到最后;可定义 “ i ” 从下标为1的位置开始遍历。
每次插入排序过程如下:
在这里插入图片描述
代码实现:

 public static void main(String[] args) {
   
        int[] arr = new int[] {
   13,8,5,2,7,0,9,3};
        insertSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void insertSort(int[] arr) {
   
        //遍历所有的数字,从1开始,因为第一个数字已经是有序的
        for (int i = 1; i < arr.length; i++) {
   
            //记录下当前的数字
            int tmp = arr[i];
            /*
            * 定义j从后往前遍历有序区间的数字,
            * 若当前数字大于记录下来的数字,则把j号下标位置的数字放到i号下标位置(即j + 1号下标位置),否则结束此次比较
            * 循环结束之后,再将所记录下来的tmp的数字放到j + 1号下标位置(循环结束之后,j--了,所以需要放的是j + 1下标位置)
            * */
            int j = i - 1;
            for ( ; j >= 0; j--) {
   
                if (arr[j] > tmp) {
   
                    arr[j + 1] = arr[j];
                } else {
   
                    break;
                }
            }
            arr[j + 1] = tmp;
        }
    }

二、希尔排序
希尔排序法又称缩小增量法。是对直接插入排序的优化。
希尔排序是将所有待排序的数据分为若干个组,然后对每个组里的数据进行排序;然后重复分组和对组内数据排序,直至最后的分组数据是两个相邻的数据,进行最后一次排序,即可将所有待排序的数据排好。
【例】
待排数据:8 1 2 6 7 4 9 5 3 6
将待排数组的长度除以2,得到的结果再除以2,直到最后值为1;把每次得到的结果记为:d(步长),然后根据步长进行分组、排序。每一次分组后都对组内元素进行排序。
在这里插入图片描述
代码实现:

 public static void main(String[] args) {
   
        int[] arr = new int[] {
   13,8,5,2,7,9,3,22,0};
        shellSort(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void shellSort(int[] arr) {
   
        //遍历所有步长
        for (int d = arr.length / 2; d > 0; d /= 2) {
   
            //遍历所有的元素
            for (int i = d; i < arr.length; i++) {
   
                //遍历每一组里面的所有元素
                for<
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值