Java蓝桥杯———几种基本排序API

1,冒泡排序

        算法描述:比较相邻两个元素大小,若反序,则将两个元素进行交换。若按升序进行排序,每进行一次循环可将序列中最大元素交换到最后位置,如同气泡在水中冒出。

        算法API实现如下:

public class BubbleSort {

    //对数组array中的元素进行排序
    public static void sort(Comparable[] array) {
        for (int i = array.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                //比较索引j和j+1处的值
                if (greater(array[j], array[j + 1])) {
                    exchange(array,j,j+1);

                }


            }

        }

    }

    //判断x是否大于y
    private static boolean greater(Comparable x, Comparable y) {

        return x.compareTo(y) > 0;
    }

    //数组索引i处元素和j处元素交换位置
    private static void exchange(Comparable[] array, int i, int j) {
        Comparable temp;
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}

2,直接插入排序

        算法描述:设有一元素个数为 n 的线性序列

        (1)进行第 i (1 =< i < n)次循环,假设前 i 个元素构成的子序列是排序的,将第 i 个元素插入到该前 i 个元素构成的子序列的适当位置,使得插入后的序列仍然是排序的,第 i 个元素的插入位置由其大小确定;

        (2)重复进行(1)的操作,n 个元素共需要进行 n - 1循环进行排序,每次循环将一个元素插入前面的子序列。

        算法API实现如下:


/**
 * 插入算法API
 */

public class InsertionSort {
    public static void sort(Comparable[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = i; j > 0; j--) {
                if(greater(array[j-1],array[j])){
                    exchange(array,j-1,j);
                }else
                    break;

            }

        }

    }

    private static boolean greater(Comparable x, Comparable y) {

        return x.compareTo(y) > 0;
    }

    private static void exchange(Comparable[] array, int i, int j) {
        Comparable temp;
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}

3,直接选择排序

        算法描述:第一次循环从 n (n>0) 个元素的数据中选择出一个假定最大或最小的元素放到最前或最后位置,下一次再从 n - 1 个元素中选出最大或最小的元素并放到次前或次后位置,以此类推,经过 n - 1 次完成排序。

        算法API实现如下:


/**
 * 直接选择排序API
 */

public class SelectionSort {
    public static void sort(Comparable[] array) {
        for (int i = 0; i <= array.length - 2; i++) {
            int minIndex = i;
            for (int j = i + 1; j < array.length; j++) {
                if (greater(array[minIndex], array[j])) {
                    minIndex = j;
                }
            }
            exchange(array, i, minIndex);

        }

    }

    //比较元素x和y的大小
    private static boolean greater(Comparable x, Comparable y) {
        return x.compareTo(y) > 0;
    }

    //数组元素array[i]和array[j]交换位置
    private static void exchange(Comparable[] array, int i, int j) {
        Comparable temp;
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}

以上三个基本算法均为算法API读者需自行建立实现类调用上述API加以实现。

        由于个人水平有限,上述算法描述或算法API可能多有不足之处,错误之处望加以指正,感激不尽。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值