import java.io.Serializable;
import java.util.Arrays;
/**
* @Author: 邪灵
* @Date: 2020/2/4 22:58
* @Description:
* @Since: 1.0
*/
public class Test implements Serializable {
public static void main(String[] args) {
int [] arr = {10,1,23,12,15,18,5,8};
System.out.println(Arrays.toString(arr));
bubbleSorlt(arr);
selectSorlt(arr);
insertSorlt(arr);
}
public static void bubbleSorlt(int [] arr){
for (int i = 0; i < arr.length-1; i++) {
//控制每一轮的比较,从第一个开始到最后一个
//没一轮都会将最大值放在最后一位,第n轮后面排好的数有n所以是arr.length-i
//第一轮时j+1是最后一位,所以j+1<arr.length也就是j<arr.length-1;
for (int j = 0; j < arr.length-i-1; j++) {
if (arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
public static void selectSorlt(int [] arr){
//设置最小元素的下标
int min;
//从第一个元素开始,最后一个不用排
for (int i = 0; i < arr.length-1; i++) {
//默认当前元素就是最小值
min = i;
//从下一个元素开始依次往后找到最小值,记录下标
for (int j = i+1; j < arr.length; j++) {
if (arr[min]>arr[j]) {
min=j;
}
}
//如果记录的下标不是当前元素,则将当前元素替换为最小值
if (min != i) {
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
System.out.println(Arrays.toString(arr));
}
public static void insertSorlt(int [] arr){
//默认第一个元素就是有序,从第二个开始,依次插入到有序元素中
for (int i = 1; i < arr.length; i++) {
//记录当前需要插入的元素
int temp = arr[i];
//记录有序元素的最后位置
int j = i-1;
//开始插入,有序元素下标最小为0,插入时有序元素依次后移,直到
//当前需要插入的元素不大于有序元素则就是需要插入的位置。
while (j>=0 && arr[j] > temp) {
//将有序元素中大于需要插入元素的所以元素依次后移
arr[j+1] = arr[j];
j--;
}
//由于最后一次移动以后j又自减,所以需要插入的位置是j+1的位置。
arr[j+1] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
三大排序算法
于 2020-05-24 23:23:12 首次发布