一、冒泡排序
1.1 算法原理
在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间最后,持续这个过程,直到数组整体有序。
1.2. 具体实现
public class Sort {
public static void main(String[] args) {
int[] array = {
1,3,5,7,9,5,2,5,6,8,0,4};
bubbleSort(array);
System.out.println(Arrays.toString(array));
}
public static void bubbleSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
boolean isSorted = true;
for (int j = 0; j < array.length - 1 - i; j++) {
if(array[j] > array[j+1]) {
int t = array[j];
array[j] = array[j+1];
array[j+1] = t;
isSorted = false;
}
}
if(isSorted) {
break;
}
}
}
}
二、插入排序
2.1算法原理(理解为扑克牌)
每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入
有序区间:[0,i)
无序区间:[i,array.length)
步骤:
①从第一个元素开始,该元素可以认为已经被排序
②取出下一个元素,在已经排序的原色序列中从后向前扫描
③如果该元素(已排序)大于新元素,将该元素移到下一位置
④将新元素插入到该位置后
⑤重复上述步骤
如下图:
2.2具体实现
public class Sort {
public static void main(String[] args) {
int[] array = {
1,3,5,7,9,5,2,5,6,8,0,4};
insertSort(array);
System.out.println("插排:" + Arrays.toString(array));
}
public static void insertSort(int[] array) {
for (int i = 0; i < array.length; i++) {
//有序:[0,i)
//无序:[i,array.length)
int key = array[i];
int j = i - 1;
for(;j >= 0 && array[j] > key;j--) {
//往后移
array[j + 1] = array[j];
}
//最大,直接放到最后
array[j + 1] = key;
}
}
三、选择排序
3.1算法原理(选最大放最后)
每一次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后(或最前),直到全部的待排序数据排完。
3.2算法实现
public class Sort