看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~
谁能九层台,不用累土起!
题目
给你一个整数数组 nums,请你将该数组升序排列。
示例 1:
输入: nums = [5,2,3,1]
输出: [1,2,3,5]
示例 2:
输入: nums = [5,1,1,2,0,0]
输出: [0,0,1,1,2,5]
提示:
1 <= nums.length <= 5 * 104-5 * 104 <= nums[i] <= 5 * 104
解题思路
- 我们定义两个指针,一个从前向后,一个从后向前
- 两个指针分别做不同的事情
- 从前向后的指针,用于将大值放到右边(遍历范围为该指针-另一指针)
- 从后向前的指针由于将小值放到左边(遍历范围为该指针-另一指针)
解题代码
var sortArray = function(nums) {
let low = 0
let high = nums.length - 1
while(low < high) {
// 找到最大值放右边
for (let i =low;i<high;i++) {
if(nums[i] > nums[i+1]) {
[nums[i], nums[i+1]] = [nums[i+1], nums[i]]
}
}
high--;
// 找到最小值放左边
for(let j = high;j>low;j--) {
if (nums[j] < nums[j-1]) {
[nums[j], nums[j-1]] = [nums[j-1], nums[j]]
}
}
low++;
}
return nums
};
快而简单的方法
var sortArray = function(nums) {
return nums.sort((a,b)=>a-b)
};
其实最简单,有时候也是最高效的。
如有任何问题或建议,欢迎留言讨论!