力扣977题 有序数组的平方

118 阅读2分钟

力扣 977题 有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

 

示例 1:

输入: nums = [-4,-1,0,3,10]
输出: [0,1,9,16,100]
解释: 平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

示例 2:

输入: nums = [-7,-3,2,3,11]
输出: [4,9,9,49,121]

 

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 已按 非递减顺序 排序

注意:下列算法思路描述中如果有不清楚的地方,可以去菜鸟教程中的算法部分查看动态图解,这样一看就懂。

基本思路:

先将数组中的负数取反,得到全部为正数的数组,然后对数组进行从小到大的排序即可。

方法1:冒泡排序法

思路:首先比较第1和第2个数,如果第一个数大于第二个数,那么把二者调换,如第一个数小于第二个数不进行操作,然后将第二个数和第三个数比较,依次类推。就是用更大的那个数去和下一个数比较的算法。

代码如下:

image.png

##方法2:选择排序: 思路:首先与第一个相比,设其为最小值,然后去比较数组后面的所有元素,找到最小值的索引,然后调换两者,然后第一个元素就成了数组中的最小值,然后再去设第二个元素为最小值,用同样的方式去寻找第二小的值,然后交换。

代码如下:

image.png

方法3:插入排序中的直接插入排序

思路:从第二个元素开始,和前一个比较,如果小于就再与前一个比较,直到找到对应的位置,同时将元素位置循环右移。

代码如下:

image.png

方法4:希尔排序(Shell):

思路:这里推荐去看一下这一篇文章,了解一下shell算法的原理,这样读起代码来更好理解。

image.png

代码如下:

df700a15da99cf9293afe8afc6dadf6.png

对于这个排序算法,我只能说记住了部分重要的原理,但是对于其中的细节还没有理解,其中随便一个地方修改成自己的理解都会有部分的case过不了。

今天就学了这4种排序算法。