排序:
public class SortDemo { public static void main(String[] args) { int[] arr = { 5, 8, 9, 12, 55, 565, 421, 12, 2512, -5, -56 }; // int[] arr = { 6, 9, 4589, 442, 458, 5232, -788, 7, 545, -44, 55, -11 // }; // selectionSort(arr); // bubbleSort(arr); directInsertSort(arr); printSort(arr); } // 选择排序 每趟都确定arr[i]的数 每次都是arr[i]的数和后面的所有arr[j]的数比较 满足就交换 // 第一趟 int[] arr = { -56, 8, 9, 12, 55, 565, 421, 12, 2512, -5, 5 }; private static void selectionSort(int[] arr) { // 第一个开始比到最后第二个就可以了 for (int i = 0; i < arr.length - 1; i++) { // 第二个开始到最后一个 for (int j = i + 1; j < arr.length; j++) { // 某个和后面所有的比较 if (arr[i] > arr[j]) { int temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } } // 冒泡排序 每趟两两交替比较 一趟下来最大/最小的已经在最端了 // 第一趟 int[] arr = {5,8,9,12,55,421,12,565,-5,-56,2512} private static void bubbleSort(int[] arr) { // 我的思维逻辑习惯这个 for (int i = 0; i < arr.length - 1; 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; } } } // for (int i = 1; i < arr.length; i++) { // for (int j = 0; j < arr.length - i; j++) { // if (arr[j] > arr[j + 1]) { // int temp = arr[j + 1]; // arr[j + 1] = arr[j]; // arr[j] = temp; // } // } // } // 数据结构正统 // for (int i = 0; i < arr.length - 1; i++) { // for (int j = arr.length - 1; j > i; j--) { // if (arr[j] < arr[j - 1]) { // int temp = arr[j - 1]; // arr[j - 1] = arr[j]; // arr[j] = temp; // } // } // } } // 直接插入排序 相当于打牌 // 变化的那次 int[] arr = { 5, 8, 9, 12, 55, 565, 565, 12, 2512, -5, -56 }; temp=421 i=6 // 变化的那次 int[] arr = { 5, 8, 9, 12, 55, 421, 565, 12, 2512, -5, -56 }; private static void directInsertSort(int[] arr) { // 第二个元素开始遍历 for (int i = 1; i < arr.length; i++) { int temp = arr[i]; int j; for (j = i; j > 0; j--) { if (arr[j - 1] > temp) { // 数组下标后移 arr[j] = arr[j - 1]; } else { break; } } // break代表不需要比较了 直接赋值 arr[j] = temp; } } private static void printSort(int[] arr) { for (int i : arr) { System.out.print(i + " "); } } }
时间: 2024-11-10 14:11:53