几个老生常谈的算法了,算是复习回顾一下吧,距离上次做算法题已经是快两年前的事情了…
看视频的时候新学了一个Comparable接口,以前没用过。
用法如:
int result = a.compareTo(b);
//a < b,result < 0
//a > b, result > 0
//a == b, result = 0
不过我只是简单回顾一下算法,好像还是用不太到这个接口,查了一下,发现Compareble的意义大概在于,要想让一个类里的对象支持比较的话,就必须实现这个接口。
题目来自力扣912,非常简单的一道升序排列数组。
-
冒泡排序
public class Solution {
public int[] sortArray(int[] nums) {
for(int i=nums.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(nums[j] > nums[j+1]){
exchange(nums,j,j+1);
}else{
continue;
}
}
}
return nums;
}
public static void exchange(int[] a,int i,int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
最坏情况下,元素比较次数+交换次数是
时间复杂度
超时了,提交没过
-
选择排序
public class Solution {
public int[] sortArray(int[] nums) {
for(int i=0;i<nums.length-1;i++){
int minn = i;
for(int j=i+1;j<nums.length;j++){
if(nums[j] < nums[minn]){
minn = j;
}else {
continue;
}
}
exchange(nums,i,minnn);
}
return nums;
}
public static void exchange(int[] a,int i,int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
时间复杂度也是
所以也超时了,没过
-
插入排序
public class Solution {
public int[] sortArray(int[] nums) {
for(int i=1;i<nums.length;i++){
for(int j=i;j>0;j--){
if(nums[j-1] > nums[j]){
exchange(nums,j-1,j);
}else{
break;
}
}
}
return nums;
}
public static void exchange(int[] a,int i,int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
时间复杂度又是
当然又超时了