NowCoder140--排序

这篇博客介绍了三种简单的排序算法:冒泡排序、选择排序和插入排序。作者通过Java代码实现并展示了这些算法,尽管冒泡排序和选择排序在牛客网测试中效率较低,但插入排序成功通过了测试。文章还提到了Arrays.sort()函数的高效解决方案。
摘要由CSDN通过智能技术生成

NowCoder140–排序

题目描述

给定一个数组,请你编写一个函数,返回该数组排序后的形式。

示例1

输入

[5,2,3,1,4]

返回值

[1,2,3,4,5]

示例2

输入

[5,1,6,2,5]

返回值


[1,2,5,5,6]

备注:

*数组的长度不大于100000,数组中每个数的绝对值不超过 1 0 9 10^9 109.

代码:

package com.xujinshan.nowcoder.nc140;

import java.util.Arrays;

/**
 * @Author: xujinshan361@163.com
 * NowCoder140 -- 排序
 */

/**
 * 冒泡排序,时间复杂度过高,牛客网不能通过
 * 思想:
 * 首先拿第一个元素和后面的所有一个个的比较,如果后面的大就交换,所以始终保证第一个
 * 元素是最小的,然后再第二第三,以此类推。
 */
class Solution01 {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     *
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort(int[] arr) {
        // write code here
        int length = arr.length;
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        return arr;
    }
}

/**
 * 直接调用Arrays.sort() 函数直接通过牛客网测试
 */
class Solution02 {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     *
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort(int[] arr) {
        Arrays.sort(arr);
        return arr;
    }
}

/**
 * 选择排序:无法通过牛客网测试,时间复杂度过高
 * 选择排序与冒泡排序有一点像,选择排序是默认前面都是已经排好序的,然后从后面选择
 * 最小的放在前面拍好的后面,首先第一轮循环的时候默认的排序好的为空,然后从后选择
 * 最小的放在数组的第一个位置,然后从剩下的找出最小的放到数组的第二个位置,第三轮
 * 的时候默认前面俩个已经拍好序了,然后一直进行下去。
 */
class Solution03 {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     *
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort(int[] arr) {
        // 总共要经过 N-1 轮比较
        for (int i = 0; i < arr.length - 1; i++) {
            int min = i;

            // 每轮需要比较的次数 N-i
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[min]) {
                    // 记录目前能找到的最小值元素的下标
                    min = j;
                }
            }

            // 将找到的最小值和i位置所在的值进行交换
            if (i != min) {
                int tmp = arr[i];
                arr[i] = arr[min];
                arr[min] = tmp;
            }

        }
        return arr;
    }
}


/**
 * 插入排序:通过牛客测试,效率贼低
 */
class Solution04 {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     *
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort(int[] arr) {
        // 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
        for (int i = 1; i < arr.length; i++) {

            // 记录要插入的数据
            int tmp = arr[i];

            // 从已经排序的序列最右边的开始比较,找到比其小的数
            int j = i;
            while (j > 0 && tmp < arr[j - 1]) {
                arr[j] = arr[j - 1];
                j--;
            }

            // 存在比其小的数,插入
            if (j != i) {
                arr[j] = tmp;
            }

        }
        return arr;
    }
}

public class NowCoder140 {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(new Solution04().MySort(new int[]{5, 2, 3, 1, 4})));
    }
}

结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值