冒泡排序
重点思想
相邻两个元素比较
步骤
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
重复步骤1~3,直到排序完成。
代码实现
import java.util.Arrays;
public class MaoSort {
public static void main(String[] args) {
int[] arr = {6,7,5,9,10,1};
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]){
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
-
System.out.println(Arrays.toString(arr));
调用arrays包,直接输出数组 -
交换位置的方式
1.异或
public class MaoSort { public static void main(String[] args) { int a = 3; int b = 4; a = a ^ b; b = a ^ b; a = a ^ b; System.out.println("a是" +a); System.out.println("b是" +b); } }
2.定义临时变量
public class MaoSort { public static void main(String[] args) { int a = 3; int b = 4; int temp = 0; temp = a; a = b; b = temp; System.out.println("a是" +a); System.out.println("b是" +b); } }
3.加减
public class MaoSort { public static void main(String[] args) { int a = 3; int b = 4; a = a + b; b = a - b; a = a - b; System.out.println("a是" +a); System.out.println("b是" +b); } }
选择排序
重点思想
找到最值,放到中心位置(下标)
步骤
1.交换最值和相应位置的下标,找到最值,
2.重复以上。
代码实现
package com.kfm.array;/*
@CreatTime:2023-08-08 14:11
*/
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
/*
选择排序: 找到最值放到相应的位置
*/
//降序
int[] arr = {1,9,5,3,6,2};
//定义最小值的下标
for(int i = 0;i < arr.length-1;i++){//每循环i次,确定第i个元素
int max = i;
//找到最大值
for(int j = i+1;j < arr.length;j++){//是从第i个元素的后一个开始比较
if(arr[j] > arr[max]){//降序把>改成<
max = j;
}
}
//交换位置
int temp =0;
temp = arr[i];
arr[i] = arr[max];
arr[max] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
插入排序
重点思想
对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
步骤
-
从第一个元素开始,该元素可以认为已经被排序;
-
取出下一个元素,在已经排序的元素序列中从后向前扫描;
-
如果该元素(已排序)大于新元素,将该元素移到下一位置;
-
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
-
将新元素插入到该位置后;
-
重复步骤2~5
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ztvchZO2-1691648996573)(C:\Users\86173\Desktop\插入排序.gif)]
代码实现
public class InsertionSort {
public static void main(String[] args) {
//插入排序
//对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
//降序
int[] arr = {3, 5, 7, 8, 6, 2};
//先遍历每个元素,直接从第二个元素开始
for(int i=1;i < arr.length;i++){
//比较后一个元素和前一个元素的大小,直到找出比后一个元素小的
int current = arr[i]; // 当前值,即要拿来和前面每一个比较的“后一个元素”
int preIndex = i - 1; // 前一个元素的下标
//和前面的元素作比较,直到找到比本身小的为止
while(preIndex >= 0 && arr[preIndex] > current){//升序只需要吧<改成>
arr[preIndex + 1] = arr[preIndex];//把前一个元素后移一位
preIndex --;
}
//前一个元素比当前值的元素小的时候
arr[preIndex + 1] = current;
}
System.out.println(Arrays.toString(arr));
}
}