基本排序算法
三大排序
- 冒泡排序:对比相邻元素值,满足条件就交换
算法实现:双循环,外层循环控制排序轮数,为length-1;内存循环比较相邻元素,满足条件则交换,循环轮数即对比次数随排序轮数减少。
- 直接选择排序:每轮从待排序数列中选择最小(或最大)元素放到最后。相比冒泡排序不需要大量交换,故速度更快。
算法实现:将数组中的每个元素与第一个元素比较,如果这个元素小于第一个元素则交换这两个元素。时间复杂度:n(n-1)/2。*
- 插入排序:将待排序数列中每轮选择的元素依次与已排序元素比较,找到合适位置插入。
算法实现:双循环,外循环从第二个元素开始到最后,内循环从外循环中选择的元素倒数到0。寄存外循环中选择的元素,依次与已排序列表中元素对比,在此过程中找到合适位置。将寄存在待排序数列中选择合适的位置插入。
public void buppleSort(int[] array) {
int len = array.length;
if (len <= 1) {
return;
}
for (int i = 0; i < len; i++) {
boolean swapped = false;
for (int j = i + 1; j < len; j++) {
if (array[i] > array[j]) {
// 交换
int t = array[i];
array[i] = array[j];
array[j] = t;
swapped = true;
}
// 如果没有发生交换,则排序完成;如果发生交换,则排序继续
}
if (!swapped) {
break;
}
}
}
public int[] insertSort(int[] array) {
int len = array.length;
if (len <= 1) {
return array;
}
for (int i = 1; i < len; i++) {
int temp = array[i];
int j = i - 1;
for (; j >= 0; j--) {
if (array[j] > temp) {
array[j + 1] = array[j];
} else {
break;// 找到插入位置
}
}
array[j + 1] = temp;//插入
}
return array;
}