java 排序算法 冒泡 插入 希尔

本文详细介绍了三种经典的排序算法:冒泡排序、插入排序和希尔排序,并提供了每种算法的Java实现代码。通过这些算法的学习,读者可以更好地理解排序算法的基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里我们用java实现3中经典的排序算法

1.冒泡排序

思想是简单易懂的.N个数,排 N -1 趟,每趟都找出最大(或最小的)一个数,放到最后位置,这样在经过N-1趟排序后,便是有序的了

    /**
     * 冒泡排序
     * @param arr
     * @return
     */
    private static void bubbleSort(Integer[] arr){
        for(int i = 1; i < arr.length; i++){
            for(int j = 0; j < arr.length - i; j++){
                if(arr[j] > arr[j+1]){
                    int temp = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

2.插入排序

思想也是简单的.排序从左往右依次进行,首先保证头2个数的有序,然后把第3个数拿出来,在头3个数中找到合适的位置插入进去,这样又保证了头3个数的有序,然后拿第4个数,第5个数。。。依次进行,最后就是有序的了。一样的N个数排序N-1

    /**
     * 插入排序
     * @param arr
     */
    private static void insertionSort(Integer[] arr){
        // 外层循环为趟数
        for(int i = 1; i < arr.length; i++){
            int temp = arr[i];
            int j;
            // 第一趟比较前两个数,第二趟前三个数...
            for(j = i; j > 0; j--){
                if(temp < arr[j-1]){
                    arr[j] = arr[j-1];
                } else {
                    break;
                }
            }
            arr[j] = temp;
        }
    }

希尔排序

希尔排序其实就是对插入排序的优化.因为在插入排序中,如果存在很小的数在数组偏后的部分就会造成该数移动的位置太多,而希尔排序会选取一个增量(什么是增量不用管,待会会讲),每次数组中都会根据增量在小范围内进行插入排序,最后当增量=1时在整体进行一次插入排序,这样可以保证不会出现很小的数字出现在数组后部分的情况,因为在前几次的排序中已经做好排序了。

    /**
     * 希尔排序    12,31,23,45,86,34,78,2,97,3,21      5,2,1   a[11]    12
     * @param arr
     */
    private static void shellSort(Integer[] arr){
        /**
         * 增量
         */
        for(int gap = arr.length / 2; gap > 0; gap /= 2){
            for(int i = 0; i < arr.length - gap; i++){
                int tar = arr[i + gap];
                int j;
                for(j = i + gap; j > 0; j--){
                    if(tar < arr[j - 1]){
                        arr[j] = arr[j - 1];
                    } else {
                        break;
                    }
                }
                arr[j] = tar;
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值