1.冒泡排序:
通过每次冒泡排序操作相邻两元素进行比较
找出最大或最小。如果满足条件,两元素间位置进行交换
每一次的冒泡都会找出一个元素达到指定位置
// 空杯子
int cup;
// 0, {33, 52, 68, 16, 92, 73, 29}
比较n-1次
//第1次:[33, 52, 16, 68, 73, 29, 92] i = 0
//第2次:[33, 16, 52, 68, 29, 73, 92] i = 1
//第3次:[16, 33, 52, 29, 68, 73, 92] i = 2
//第4次:[16, 33, 29, 52, 68, 73, 92] i = 3
//第5次:[16, 29, 33, 52, 68, 73, 92] i = 4
//第6次:[16, 29, 33, 52, 68, 73, 92] i = 5
for (int i = 0; i < arr.length - 1; i++) {
// 通过冒泡 每一次找出一个最值
for (int j = 0; j < arr.length - 1 - i; j++) {
if(arr[j]>arr[j+1]){
// 位置互换
cup = arr[j];
arr[j] = arr[j+1];
arr[j+1] = cup;
}
}
System.out.println("第"+(i+1)+"次:"+Arrays.toString(arr));
}
时间复杂度是n的平方
2.选择排序:
在数组中选择性的找出最值,放置到数组的指定位置
然后再在未操作的元素中重复以上操作
// 找最值 最大值
// 定义一个杯子
int cup;
for (int i = 1; i < arr.length; i++) {
// 存储最值下标
int max = arr.length - i;
// 通过该循环找出最值
for (int j = 0; j < arr.length - i; j++) {
if(arr[max]<arr[j]){
// 改变 杯子中存储的下标
max = j;
}
}
// 进行元素的位置互换 arr[max] arr[arr.length-i]
cup = arr[max];
arr[max] = arr[arr.length-i];
arr[arr.length-i] = cup;
System.out.println("第"+i+"次:"+ Arrays.toString(arr));
}
时间复杂度是n的平方
3.插入排序:
把数组切割成两部分,一部分为有序的,一部分为无序
每一次都从无序部分获取一个元素,插入至有序部分
使有序部分每一次都成为一个新的有序数组
{33, 52, 68, 16, 92, 73, 29}
// 空杯子
int cup;
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0; j--) {
if(arr[j]<arr[j-1]){
cup = arr[j];
arr[j] = arr[j-1];
arr[j-1] = cup;
}
}
}
时间复杂度是n的平方
4.反转排序:
把数组中的元素顺序反转 {1,2,3,4,5}==>{5,4,3,2,1}
int cup;
for (int i = 0; i < arr.length/2; i++) {
//位置互换
// arr[i] <==> arr[arr.length-i-1]
cup = arr[i];
arr[i] = arr[arr.length-i-1];
arr[arr.length-i-1] = cup;
}
5.快速排序:
// 通过别人帮我写好的直接使用
//Arrays.sort(arr);
// 可以指定位置排序 [fromIndex,toIndex)
Arrays.sort(arr,1,4);
System.out.println(Arrays.toString(arr));