冒泡排序:相邻的两个元素进行比较,如果两者之间的排序不符合要求,就相互交换位置。每一轮比较都可以确定本轮参与比较的元素中最大元素的正确位置,一旦确定一个最大值,该元素就不再参与下一轮的比较
import java.util.Arrays;
public class Bubble_Sort { //冒泡排序
public static void main(String[] args) {
int[] arr={8,6,4,9,0,1,5,7,2,3};
for (int i = 0; i < arr.length; i++) { // 外层循环控制比较的轮次数
/*
* 两两比较,所以第1轮参与比较的数为arr.length- 1
* 此外,每过一轮,都会确定一个最大数的位置,因此第i轮参与比较的数为arr.length-1-i
*/
//内层循环进行本轮比较,并按照规则顺序交换位置
for (int j = 0; j < arr.length- 1 - i; j++) {
int nextIndex = j + 1;
if (arr[j] > arr[nextIndex]) {
// 如果相邻两数左边的比右边的大,则交换位置,即将最大数往后移
int temp = arr[nextIndex];
arr[nextIndex] = arr[j];
arr[j] = temp;
}
}
System.out.println(Arrays.toString(arr));
}
}
}
选择排序:每个数看一下,比较选最小值,交换到最前面,一旦确定一个最小值,该元素就不再参与下一轮的比较
import java.util.Arrays;
public class Selection_sort {//选择排序
public static void main(String[] args) {
int[] arr={8,6,4,9,0,1,5,7,2,3};
for(int i=0;i<arr.length-1;i++){ //外层循环控制轮次数
int index=i; //记录当前位置
for(int j=i+1;j<arr.length;j++){//内层循环找当前最小数
if(arr[j] < arr[index]){
index=j; //记录最小数位置
}
}
//将最小数交换到当前的最前面
int temp=arr[index];
arr[index]=arr[i];
arr[i]=temp;
System.out.println(Arrays.toString(arr));
}
}
}
插入排序:将原来的排列分成两部分看,前面一部分看成有序排列(最初只有一个元素),后面一部分还是看作原来的无序排列,然后按照顺序依次让无序排列中的元素插队到有序排列中,插入的位置需要符合排序的要求,当无序排列中的人全部都插队到了有序排列中后,最后得到的就是我们所需要的排序结果
import java.util.Arrays;
public class Insertion_sort { //插入排序
public static void main(String[] args) {
int[] arr={9,6,5,8,7,3,4,1,2,0};
//外层循环控制插入身高的轮次数
//将原序列中第一个数看作一个有序序列
for(int i=1;i<arr.length;i++){
int temp=arr[i];//无序序列第一个数是原序列第二个数
int leftindex=i-1;
while(leftindex >= 0 && arr[leftindex]>temp){
//前面有序序列的数大,则前面的那个较大数字后退,让位置
arr[leftindex + 1] = arr[leftindex];
leftindex --; //无序序列中的数继续和有序序列前面一个数比较
}
// 找到合适的位置后,插入到有序序列对应位置
arr[leftindex+1] = temp;
System.out.println(Arrays.toString(arr));
}
}
}