package com.limo_03;
//需求:实现选择排序(默认从小到大)
/*
* 思想:
* 在每一趟中,将当前最小索引处元素与其之后的所有元素进行比较,如果后者更小就交换,后者就代替前者继续与后面的
* 元素进行比较,遇到更小的就交换。一趟下来,该趟中最小的元素就按照次序出现在了前面。当只剩下一个数时整个数组就变得有序了。
*
* 详解:
* x个数需要比较x-1趟。第m趟开始时,已经有m-1个元素排序后按照次序放在了前面,从第m个元素开始进行排序,即第几趟就从第几个
* 元素开始排序,二者一致。冒泡排序法将排序后的数按照次序放在数组的后面(找每一趟中大的数),但而选择排序是放在前面
* (找每一趟中小的数)所以选择排序中,循环每次都是到数组的最后的。
* 举例:
* 5个数需要比较4趟。第3趟开始时,已经有2个元素排序后按照次序放在了前面,从第3个元素开始进行排序,到数组的最后
* 5个数需要比较4趟。第4趟开始时,已经有3个元素排序后按照次序放在了前面,从第4个元素开始进行排序,到数组的最后
*
*/
public class QuickSort {
public static void main(String[] args) {
// 静态初始化一个数组
int[] arr = { 1, 3, 2, 9, 6, 7, 8, 0, 5 };
System.out.println("遍历前:");
printArray(arr);
// 外层循环控制趟数:x个数比较x-1趟
for (int x = 0; x < arr.length - 1; x++) {
// 将每一趟中当前的最小索引处的元素与其后所有的元素进行比较,从索引为x处到索引为arr.length-1处
for (int m = x + 1; m < arr.length; m++) {
if (arr[m] < arr[x]) {
int temp = arr[x];
arr[x] = arr[m];
arr[m] = temp;
}
}
}
System.out.println("遍历后");
printArray(arr);
}
public static void printArray(int[] arr) {
// 这个遍历数组的方法,我们可以直接遍历数组,也可以按照要求将结果用字符串(或StringBuilder)拼接
// 然后输出字符串
// 因为方式1 我们用过无数次了 所以这次尝试一下方式2
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
sb.append(arr[x]).append("]");
} else {
sb.append(arr[x]).append(", ");
}
}
String result = sb.toString();
System.out.println("结果是:" + result);
}
}
//需求:实现选择排序(默认从小到大)
/*
* 思想:
* 在每一趟中,将当前最小索引处元素与其之后的所有元素进行比较,如果后者更小就交换,后者就代替前者继续与后面的
* 元素进行比较,遇到更小的就交换。一趟下来,该趟中最小的元素就按照次序出现在了前面。当只剩下一个数时整个数组就变得有序了。
*
* 详解:
* x个数需要比较x-1趟。第m趟开始时,已经有m-1个元素排序后按照次序放在了前面,从第m个元素开始进行排序,即第几趟就从第几个
* 元素开始排序,二者一致。冒泡排序法将排序后的数按照次序放在数组的后面(找每一趟中大的数),但而选择排序是放在前面
* (找每一趟中小的数)所以选择排序中,循环每次都是到数组的最后的。
* 举例:
* 5个数需要比较4趟。第3趟开始时,已经有2个元素排序后按照次序放在了前面,从第3个元素开始进行排序,到数组的最后
* 5个数需要比较4趟。第4趟开始时,已经有3个元素排序后按照次序放在了前面,从第4个元素开始进行排序,到数组的最后
*
*/
public class QuickSort {
public static void main(String[] args) {
// 静态初始化一个数组
int[] arr = { 1, 3, 2, 9, 6, 7, 8, 0, 5 };
System.out.println("遍历前:");
printArray(arr);
// 外层循环控制趟数:x个数比较x-1趟
for (int x = 0; x < arr.length - 1; x++) {
// 将每一趟中当前的最小索引处的元素与其后所有的元素进行比较,从索引为x处到索引为arr.length-1处
for (int m = x + 1; m < arr.length; m++) {
if (arr[m] < arr[x]) {
int temp = arr[x];
arr[x] = arr[m];
arr[m] = temp;
}
}
}
System.out.println("遍历后");
printArray(arr);
}
public static void printArray(int[] arr) {
// 这个遍历数组的方法,我们可以直接遍历数组,也可以按照要求将结果用字符串(或StringBuilder)拼接
// 然后输出字符串
// 因为方式1 我们用过无数次了 所以这次尝试一下方式2
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
sb.append(arr[x]).append("]");
} else {
sb.append(arr[x]).append(", ");
}
}
String result = sb.toString();
System.out.println("结果是:" + result);
}
}