public class Sort { public static void main(String[] args) { int[] arr = new int[]{4, 1, 5, 3, 8, 2, 7, 9, 6}; Sort sort = new Sort(); //sort.selectSort(arr); //sort.bubbleSort(arr); //sort.insertSort(arr); sort.quickSort(arr, 0, arr.length - 1); for (int i : arr) { System.out.print(i + "\t"); } } /** * 选择排序: * 假设第一个为最小值,将其与后面的数依次比较,找出真正最小的值并标记位置 * 将最小值与原来的最小值位置互换,开始第二轮假设 */ public void selectSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int min = arr[i]; int minIndex = i;//记录最小值的人下标 for (int j = i + 1; j < arr.length; j++) { if (arr[j] < min) { min = arr[j]; minIndex = j; } } if (minIndex != i) { int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } } /** * 冒泡排序 * 从后往前冒出每一轮比较的最小值 */ public void bubbleSort(int[] arr) { for (int i = 1; i < arr.length; i++) { for (int j = arr.length - 1; j >= i; j--) { if (arr[j] < arr[j - 1]) { int temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; } } } } /** * 插入排序 * 将下一个元素插入到前面已经排好的队列中 * 将下一个元素与前面队列的元素一一比较交换至合适的位置 */ public void insertSort(int[] arr) { for (int i = 1; i < arr.length; i++) { for (int j = i - 1; j >= 0; j--) { if (arr[j + 1] < arr[j]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } else { break; } } } } /** * 快速排序 * 通过一趟排序将要排序的数据分割成独立的两个部分, * 一部分的所有数据都小于某个值,另一部分所有的数据都大于某个值, * 然后按照此方法对这两部分的数据分别进行快速排序,整个排序的过程可以递归进行, * 以此将整个数据变成有序的序列。 * a:先从数列中取出第一个数作为基准数。 * b:分区过程中,小于或者等于它的数放在它的左边,将比这个数大的数全放在它的右边, * c:再对左右区间重复第二步,直到各个区间只有一个数。 */ public void quickSort(int[] arr, int start, int end) { if (start >= end) { return; } int i = start; int j = end; int temp = arr[i]; while (i != j) { while (i < j && arr[j] >= temp) { j--; } if (i < j) { arr[i] = arr[j]; } while (i < j && arr[i] <= temp) { i++; } if (i < j) { arr[j] = arr[i]; } } arr[i] = temp; quickSort(arr, start, i - 1); quickSort(arr, i + 1, end); } }
选择排序~冒泡排序~插入排序~快速排序
猜你喜欢
转载自blog.csdn.net/myCsdn_Xm/article/details/104461778
今日推荐
周排行