基本思想,依次比较相邻的元素大小,将大的元素交换到后面,
每次都是从当前元素位置出发,直到未完成排序的末尾;依次冒泡,直到完成由小到大的排序;
class Solution {
public int[] sortArray(int[] nums) {
int n = nums.length;
//基本冒泡排序;
for(int i =0;i<n-1;i++){
for(int j=1;j<n-i;j++){
//比较交换;
if(nums[j]<nums[j-1]){
swap(nums,j-1,j);
}
}
}
return nums;
}
//交换方法;
private void swap(int[] nums,int a,int b){
//简单的临时变量交换法;
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
}
同样地,在912. 排序数组这道题中测试时,
由于测试用例的大小,出现了超时;
简易优化,使用一个布尔标志位;判断是否进行了交换;
class Solution {
public int[] sortArray(int[] nums) {
int n = nums.length;
//基本冒泡排序;
for(int i =0;i<n-1;i++){
//布尔标志位;
boolean flag = true;
for(int j=1;j<n-i;j++){
//比较交换;
if(nums[j]<nums[j-1]){
swap(nums,j-1,j);
flag = false;
}
}
//根据标志位判断是否进行了交换排序;
if(flag){
break;
}else{
flag = true;
}
}
return nums;
}
//交换方法;
private void swap(int[] nums,int a,int b){
//简单的临时变量交换法;
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
}
在这道题的测试用例下,即使使用标志位优化,还是超时;
但是算法的思想逻辑没有错误,只是时间复杂度问题;