每日一题14(经典排序)

原题入口
描述
给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。

样例
样例 1:
输入: [3, 2, 1, 4, 5]
输出: [1, 2, 3, 4, 5]

样例解释: 
返回排序后的数组。

样例 2:
输入: [1, 1, 2, 1, 1]
输出: [1, 1, 1, 1, 2]

样例解释: 
返回排好序的数组。
public class Solution {
    /**
     * @param A: an integer array
     * @return: nothing
     */
    public void sortIntegers(int[] A) {
        // write your code here
        this.shellSort(A);
    }

    /**
     * 交换数组元素
     */
    public int[] exchangeArrayElement(int[] array, int index1, int index2) {
        int val = array[index1];
        array[index1] = array[index2];
        array[index2] = val;
        return array;
    }

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

    /**
     * 选择排序
     */
    public int[] selectionSort(int[] array) {
        int minIndex;
        for (int i = 0; i < array.length; i++) {
            minIndex = i;
            for (int j = i + 1; j < array.length; j++) {
                if(array[minIndex] > array[j]) {
                    minIndex = j;
                }
            }
            if (minIndex != i) {
                array = this.exchangeArrayElement(array, minIndex, i);
            }
        }
        return array;
    }

     /**
     * 插入排序
     */
    public int[] insertionSort(int[] array) {
        int currentVal;
        for (int i = 1; i < array.length; i++) {
            currentVal = array[i];
            int j;
            for (j = i - 1; j >= 0; j--) {
                if(array[j] > currentVal) {
                    array[j + 1] = array[j];
                } else {
                    break;
                }
            }
            array[j + 1] = currentVal;
        }
        return array;
    }

    /**
     * 希尔排序
     */
    public int[] shellSort(int[] array) {
        int len = array.length;
        int temp;
        for (int step = len / 2; step > 0; step /= 2) {
            for (int i = step; i < len; i++) {
                temp = array[i];
                int j = i - step;
                while (j >= 0 && array[j] > temp) {
                    array[j + step] = array[j];
                    j -= step;
                }
                array[j + step] = temp;
            }
        }
        return array;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值