97.排序数组
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-an-array
题目描述
给定一个整数数组 nums,将该数组升序排列。
示例 1:
输入:[5,2,3,1]
输出:[1,2,3,5]
示例 2:
输入:[5,1,1,2,0,0]
输出:[0,0,1,1,2,5]
提示:
1 <= A.length <= 10000
-50000 <= A[i] <= 50000
关键技术
排序算法
题目分析
法一:sort 函数。
/** * @param {number[]} nums * @return {number[]} */ var sortArray = function(nums) { nums.sort((a,b)=>a-b); return nums; };
法二:冒泡排序:比较相邻的元素,从开始第一对比到结尾的最后一对,如果前一个比后一个大,交换位置。
/** * @param {number[]} nums * @return {number[]} */ //冒泡排序 var sortArray = function(nums) { let n = nums.length; if(n < 2){ return nums; } for(let i=0;i<n;i++){ for(let j=0;j<n-i-1;j++){ if(nums[j+1] < nums[j]) { let temp = nums[j+1]; nums[j+1] = nums[j]; nums[j] = temp; } } } return nums; };
法三:选择排序:从数组中选择最小的元素,将它与数组中第一个元素交换位置,再从数组剩下的元素中选择出最小的元素,与数组第二个位置交换顺序。
/** * @param {number[]} nums * @return {number[]} */ //选择排序 var sortArray = function(nums) { let n = nums.length; if(n < 2){ return nums; } for(let i=0;i<n;i++){ let min = i; for(let j=i;j<n;j++){ if(nums[j] < nums[min]) { min = j; } } let temp = nums[min]; nums[min] = nums[i]; nums[i] = temp; } return nums; };
法四:插入排序:每次都将当前元素插入到左侧已经排序的数组中,使得插入之后左侧数组依然有序。
/** * @param {number[]} nums * @return {number[]} */ //插入排序 var sortArray = function(nums) { let n = nums.length; if(n < 2){ return nums; } for(let i=1;i<n;i++){ let temp = nums[i]; let j = i-1; //默认已排序的元素 while(j>=0 && nums[j]>temp){ //在已排序好的队列中从后向前扫描 nums[j+1] = nums[j]; //已排序的元素大于新元素,将该元素移动到下一个位置 j--; } nums[j+1] = temp; } return nums; };