java 排序算法-选择排序

选择排序:随便站一排,第一个先站出来,和后面最小的那个比较,如果和后面最小的还小,那么排头就是他的,如果比最小的小,那么他和那个最小的换一下位置,但是不管怎么排,最小的位置是有人占了,剩下的都比他要大,剩下的也按照这个规矩排吧,可是不用和第一个了比了,只后面的进行比较就行了,这样一圈下来,每次都选出来了最小的,最小的按照顺序排列了,那么队列自然站好了。


具体代码如下:

public static int[] sortSelect(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        int index = i;
        for (int m = i + 1; m < arr.length; m++) {
            if (arr[m] < arr[index]) {
                index = m;
            }
        }
        if (arr[i] > arr[index]) {
            int temp;
            temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }
    }
    return arr;
}

我稍微改进了一下,改进的地方标红了,

public int[] sortSelect(int[] array) {
    int length = array.length;
    for (int i = 0; i < length; i++) {
        //取出来i 坐标后面所有元素中最小的那个数的坐标
        int index = length-1;//默认是最右边为基准进行比较
        for (int j = i + i; j < length-1; j++) {
            if (array[j] < array[index]) {//如果小于最右边的值,那么基准改变
                index = j;
            }
        }
        //到这为止,得到了最小值的坐标index
        if (array[i] > array[index]) {
        //比大小,如果比最小的要大,两个就交换一下位置
            swap(array, i, index);
        }
    }
    return array;
}

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

这是我稍微改进了一下,改进的地方标红了,

说明为什么:第一个地方是先把数组长度记录下来,然后在进行循环,如果循环中每次都记录长度,肯定会影响效率的,这个都应该知道,

主要是下面的,我之所以没有index 的位置改一下,我是想着 如果index 刚开始等于i的情况,那么内循环结束后,得到的是整个队列中最小的值,这样只需要把这个值赋值给i的位置就可以了,没有必要进行判断了,而如果index 从最后一个开始,循环结束到最后一个前面那个,内循环得到的就是后面中最小的,然后再和i 位置的进行比较,得到的也是整个队列中最小的,再判断是否要进行交换,这样会更合理的。肯定会有其他修改方法,这只是一种。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值