十大经典排序算法
一、冒泡排序
循环次数较多(慢)(n(n-1))/2
// 原数组
int[] array = {12,5,90,23,233,7,26};
// 外层for循环控制 循环几大趟(长度减一趟,从0开始循环即 < 长度 - 1)
for (int i = 0; i < array.length - 1; i++) {
// 内层for循环控制,每趟需要比较几次
// (每次都开头很后面的比较,比较到倒数第二项即可,已经排到后面的无需再次比较。所以长度 - i - 1)
for (int j = 0; j < array.length - i - 1; j++) {
if(array[j] > array[j + 1]){ // 升序/降序 只需改变大于号/小于号 即可
int num = array[j] ^ array[j + 1];
array[j] = num ^ array[j];
array[j + 1] = num ^ array[j];
}
}
}
// 循环遍历数组、并输出
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
二、选择排序
与冒泡排序类似,时间复杂度相同(慢)
int[] array = {28,39,2,45,0,3};
// 选择排序(同头开始,拿一个数跟后面的每一个数比较)
for (int i = 0; i < array.length - 1; i++) {
// 那个数很它后面的数,挨个比较
for (int j = i + 1; j < array.length; j++) {
if(array[i] > array[j]){
// 异或交换法
array[i] = array[i] ^ array[j];
array[j] = array[i] ^ array[j];
array[i] = array[i] ^ array[j];
}
}
}
//内置方法,直接输出数组内容
System.out.println(Arrays.toString(array));
三、插入排序
public static void main(String[] args) {
int[] array = {12,3,23,1,34};
for (int i = 1; i < array.length; i++) {
int num = array[i];
boolean f = true;
for (int j = i - 1; j >= 0; j--){
if(num < array[j]){
array[j + 1] = array[j];
}else{
array[j + 1] = num;
f = false;
break;
}
}
if(f){
array[0] = num;
}
}
System.out.println(Arrays.toString(array));
}
- 画图分析一
- 画图分析二