选择排序
- 基本思路:每次选择一个最小的值放在前面
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 稳定性:不稳定
package Sort;
public class SelectSort {
public static void swap(int[] vec, int i, int j){
int tmp = vec[i];
vec[i] = vec[j];
vec[j] = tmp;
}
public static void selectSort(int[] vec){
if(vec.length < 2)
return;
for (int i = 0; i < vec.length - 1; i++) {
int minIndex = i;
for(int j = i + 1; j < vec.length; j++){
minIndex = vec[j] < vec[minIndex] ? j : minIndex;
}
swap(vec, i, minIndex);
}
}
public static void main(String[] args) {
int[] vec = {5,2,0,7,-3,8,12};
selectSort(vec);
for(int x : vec){
System.out.print(x + " ");
}
}
}
冒泡排序
- 基本思想:每次比较相邻两个,将较大元素置于后面
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 稳定性:稳定
package Sort;
public class BubbleSort {
public static void swap(int[] vec, int i, int j){
int tmp = vec[i];
vec[i] = vec[j];
vec[j] = tmp;
}
public static void bubbleSort(int[] vec){
if(vec.length < 2)
return;
for (int i = vec.length-1; i > 0; i--) {
for(int j = 0; j < i; j++){
if(vec[j] > vec[j+1]){
swap(vec, j, j+1);
}
}
}
}
public static void main(String[] args) {
int[] vec = {5,2,0,7,-3,8,12};
bubbleSort(vec);
for(int x : vec){
System.out.print(x + " ");
}
}
}
插入排序
- 基本思想:先将前面排好序,新元素向前比较放到合适位置
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 稳定性:稳定
package Sort;
public class InsertSort {
public static void swap(int[] vec, int i, int j){
int tmp = vec[i];
vec[i] = vec[j];
vec[j] = tmp;
}
public static void insertSort(int[] vec){
for(int i = 1; i < vec.length; i++){
for(int j = i - 1; j >= 0; j--){
if(vec[j] > vec[j+1]){
swap(vec,j,j+1);
}
}
}
}
public static void main(String[] args) {
int[] vec = {5,2,0,7,-3,8,12};
insertSort(vec);
for(int x : vec){
System.out.print(x + " ");
}
}
}