标签:大神 自己 sorted 最大值 长度 bre 超出 break code
第一种方法 public static void maoPao() { int[] arr = { 6, 3, 8, 2, 9, 1 }; System.out.println("排序前数组为:"); for (int num : arr) { System.out.print(num + " "); } for (int i = 0; i < arr.length - 1; i++) {// 外层循环控制排序趟数 ,因为6个数,只需要循环5次就行。所以减1 for (int j = 0; j < arr.length - 1 - i; j++) {// 内层循环控制每一趟排序多少次 //外圈循环:arr.length - 1 //例如长度为6;说明是6个数进行比较,因此只需要比较5次就可以了。
//内圈循环:arr.length - 1 - i // 减 1: 因为下面是 (arr[j] > arr[j + 1] 比较,如果不减1,
//当j最大的时候,arr[j + 1] 就会报错,超出数组长度
//减 i : 例如当 i = 1时,说明第一次循环结束,刚开始第二次外循环,
//经过第一次循环之后,最后一个数就是最大的, //没有必要每次循环都在此进行和最后一个最大的比较的。
//比较原理 //相邻的两两比较。 // 例如:内循环开始时, j=0;arr[j] 和 arr[j+1] 就是
//arr[0] 和 arr[1] 比较,如果 arr[0] 大于 arr[1] 就让两个数的值互换, //arr【0】获得数值较小值,arr【1】获得较大的值。当内循环开始第二次,j=1,
//arr【0】就不再比较,arr【1】和arr【2】 // 比较,直到最大值到最后一位。然后再次开始外循环,获得第二小的最大值。直到结束。 if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } System.out.println(); System.out.println("排序后的数组为:"); for (int num : arr) { System.out.print(num + " "); } } 第二种方法 public static void maoPao2() { int[] unsorted = { 6, 3, 8, 2, 9, 1 }; System.out.println("排序前数组为:"); for (int num : unsorted) { System.out.print(num + " "); } System.out.println(unsorted.length); for (int i = 0; i < unsorted.length - 1; i++) { // 当j=i;说明先比较第一个,第一个比较完成之后,后面的循环就不在比较了。
// 当i=0;unsorted[i]就是unsorted[0],说明这是第一次循环,
// 把unsorted[0]和unsorted[j](j从1一直变化到最大值)
// 期间unsorted[0]依次和它们比较,如果unsorted[0]大于其中一个就相互换值
// ,直到unsorted[0]是最小的 // 当第二次循环开始的时候,i=1;内循环直接放弃unsorted[0]的比较,
//直接从unsorted[1]开始和unsorted[j]开始进行比较,然后确定第二小的值 // 直到循环结束,从小到大 for (int j = i; j < unsorted.length; j++) { if (unsorted[i] > unsorted[j+1]) { int temp = unsorted[i]; unsorted[i] = unsorted[j+1]; unsorted[j+1] = temp; } } } System.out.println(); System.out.println("排序后的数组为:"); for (int num : unsorted) { System.out.print(num + " "); } } 第三种方法 //前面两个方法都是先获得最大的数放在最后,然后获得第二小的数。
//这个方法是先获得最小的数,然后依次获得第二小的数。 private void core(int[] array) { int arrayLength = array.length; for (int i = 0; i < arrayLength; i++) { for (int j = arrayLength - 2; j >= i; j--) { if (array[j] > array[j + 1]) { ArrayUtils.swap(array, j, j + 1); } } } } 第四种方法(双向冒泡排序) 说明:从一个数组的开头和结尾同时开始排序,当到中间时结束。
同时获得最大的数和最小的数,分别放在开始和结尾。然后获得第二
小的数和第二大的数放在第二位和倒数第二位,直到中间碰头。 private void core(int[] array) { int arrayLength = array.length; int preIndex = 0; int backIndex = arrayLength - 1; while(preIndex < backIndex) { preSort(array, arrayLength, preIndex); preIndex++; if (preIndex >= backIndex) { break; } backSort(array, backIndex); backIndex--; } } // 从前向后排序 private void preSort(int[] array, int length, int preIndex) { for (int i = preIndex + 1; i < length; i++) { if (array[preIndex] > array[i]) { ArrayUtils.swap(array, preIndex, i); } } } // 从后向前排序 private void backSort(int[] array, int backIndex) { for (int i = backIndex - 1; i >= 0; i--) { if (array[i] > array[backIndex]) { ArrayUtils.swap(array, i, backIndex); } } }
标签:大神 自己 sorted 最大值 长度 bre 超出 break code
原文地址:https://www.cnblogs.com/binLiCheng/p/9385337.html