冒泡排序法
public static void main(String[] args) { int arr[] = {8, 5, 3, 2, 4}; //冒泡 for (int i = 0; i < arr.length; i++) { //外层循环,遍历次数 for (int j = 0; j < arr.length - i - 1; j++) { //内层循环,升序(如果前一个值比后一个值大,则交换) //内层循环一次,获取一个最大值 if (arr[j] > arr[j + 1]) { int temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } }
选择排序
//将 i 前面的当作是已经排好序的,后面是无序的。在i后面无序中选择出最小的那个值,和i的值进行替换
public static void main(String[] args) { int arr[] = {6, 5, 3, 2, 4}; //选择 for (int i = 0; i < arr.length; i++) { //默认第一个是最小的。 int min = arr[i]; //记录最小的下标 int index = i; //通过与后面的数据进行比较得出,最小值和下标 for (int j = i + 1; j < arr.length; j++) { if (min > arr[j]) { min = arr[j]; index = j; } } //然后将最小值与本次循环的,开始值交换 int temp = arr[i]; arr[i] = min; arr[index] = temp; //说明:将i前面的数据看成一个排好的队列,i后面的看成一个无序队列。每次只需要找无需的最小值,做替换 } }
插入排序:默认将i左边看成有序列表,后面无序的列表循环每一个数据,如果比前面的数据小则交换
public static void main(String[] args) { int arr[] = {7, 5, 3, 2, 4}; //插入排序 for (int i = 1; i < arr.length; i++) { //外层循环,从第二个开始比较 for (int j = i; j > 0; j--) { //内存循环,与前面排好序的数据比较,如果后面的数据小于前面的则交换 if (arr[j] < arr[j - 1]) { int temp = arr[j - 1]; arr[j - 1] = arr[j]; arr[j] = temp; } else { //如果不小于,说明插入完毕,退出内层循环 break; } } } }
快速排序:
package test; public class sort4 { public static void main(String[] args) { int arr[] = {7, 5, 3, 2, 4}; //快速排序 int l=0; int r=arr.length-1; quickSort(arr,l,r); for(int i=0;i<arr.length;i++) { System.out.println(arr[i]); } } private static void quickSort(int[] arr, int l, int r) { if(l<r) { int i=l; //复制 l和r的值是因为 后面递归的时候要用到l,r int j =r; //记录一下这次要找的是哪个值 int temp=arr[i]; //此时 arr[i]是空的 while(i!=j) { //从右边找第一个大于temp的数 while(i<j&&arr[j]>temp)j--; arr[i]=arr[j]; //将找到的arr[j]填写到空出来的arr[i]的位置, //此时arr[j]变成空的 while(i<j&&arr[i]<temp)i++; arr[j]=arr[i]; //此时arr[i]变成空的 } //当最后i=j的时候,就找到的temp的正确位置 arr[i]=temp; quickSort(arr,l,i-1); quickSort(arr,i+1,r); } } }