【题目】912. 排序数组
给你一个整数数组 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 <= 50000
-50000 <= nums[i] <= 50000
【解题思路1】冒泡
虽然正确,但一般都会超时
class Solution {
public int[] sortArray(int[] nums) {
//冒泡排序
for(int i=0; i<nums.length; i++){
for(int j=i+1; j<nums.length; j++){
if(nums[i] > nums[j]){
swap(nums, i, j);
}
}
}
return nums;
}
public void swap(int[] nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
【解题思路2】选择排序
每次选择 [ i, len-1 ] 区间的最小元素,用min保存下标,然后和 nums[i] 交换,使 [ 0, i ] 为有序区间。
class Solution {
public int[] sortArray(int[] nums) {
//选择排序
for(int i=0; i<nums.length; i++){
int min = i; //[i,len-1]最小元素的下标
for(int j=i+1; j<nums.length; j++){
if(nums[min] > nums[j]){
min = j;
}
}
swap(nums, i, min);
}
return nums;
}
public void swap(int[] nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
【解题思路3】插入排序
class Solution {
public int[] sortArray(int[] nums) {
//插入排序
for(int i=1; i<nums.length; i++){
int temp = nums[i]; //暂存要插入的元素
int j = i;
while( j>0 && temp<nums[j-1]){
nums[j] = nums[j-1]; //如果要插入的元素小于当前元素,当前元素后移
j--;
}
nums[j] = temp; //找到要插入的位置,插入元素
}
return nums;
}
}
【解题思路4】快速排序
【解题思路5】归并排序
【解题思路6】堆排序