8.排序工具类

/**
 * 排序工具类
 *
 * @author zlx
 * @date 2021/07/14 14:08
 **/
public class SortUtils {

    // 插入排序
    public static int[] insertSort(int[] data) {
        int tmp, j;
        for (int k = 0; k < data.length; k++) {
            tmp = data[k];
            j = k - 1;
            while (j >= 0 && tmp < data[j]) {
                data[j + 1] = data[j];
                j--;
            }
            data[j + 1] = tmp;
        }
        return data;
    }

    // 选择排序
    public static int[] selectSort(int[] data) {
        int i, j, k, tmp = 0;
        for (i = 0; i < data.length - 1; i++) {
            k = i;
            for (j = i + 1; j < data.length; j++) {
                if (data[j] < data[k]) {
                    k = j;
                }
            }
            if (k != i) {
                tmp = data[i];
                data[i] = data[k];
                data[k] = tmp;
            }
        }
        return data;
    }

    // 冒泡排序
    public static int[] bubbleSort(int[] data) {
        int i, j, tmp;
        for (i = 0; i < data.length - 1; i++) {
            for (j = data.length - 1; j > i; j--) {
                if (data[j] < data[j - 1]) {
                    tmp = data[j];
                    data[j] = data[j - 1];
                    data[j - 1] = tmp;
                }
            }
        }
        return data;
    }

    //快速排序
    public static int[] quickSort(int[] data, int low, int high) {
        int i, j, temp, t;
        if (low > high) {
            return data;
        }
        i = low;
        j = high;
        //temp就是基准位
        temp = data[low];
        while (i < j) {
            //先看右边,依次往左递减
            while (temp <= data[j] && i < j) {
                j--;
            }
            //再看左边,依次往右递增
            while (temp >= data[i] && i < j) {
                i++;
            }
            //如果满足条件则交换
            if (i < j) {
                t = data[j];
                data[j] = data[i];
                data[i] = t;
            }

        }
        //最后将基准为与i和j相等位置的数字交换
        data[low] = data[i];
        data[i] = temp;
        //递归调用左半数组
        quickSort(data, low, j - 1);
        //递归调用右半数组
        quickSort(data, j + 1, high);
        return data;
    }

    //希尔排序
    public static int[] shellSort(int[] data) {
        for (int gap = data.length / 2; gap > 0; gap /= 2) { /*步长逐渐减小*/
            for (int i = gap; i < data.length; i++) { /*在同一步长内*/
                //同一步长内排序方式是插入排序
                int temp = data[i], j; //待排元素
                //j-gap代表有序数组中最大数的下标,j-pag表示有序数组的前一个元素,减pag是减去偏移量就是步长
                for (j = i; j >= gap && temp < data[j - gap]; j -= gap) {
                    data[j] = data[j - gap]; //原有序数组最大的后移一位
                }
                data[j] = temp; //找到了合适的位置插入
            }
        }
        return data;
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值