数组的排序
冒泡排序和选择排序,也可以使用数组的API
Arrays.sort() 对数组的排序(从小到大)
选择排序:
就是用数组的第一个元素和其余的每个元素进行比较,比第一个元素小的就和第一个元素互换位置,
这样就每次循环就可以得出每次最小的元素,然后下一次将不会判断已经拍好序的序,因为里层的循环是等于外层循环的值的
外层的循环就是确定从数组那个下标位置上的数进行比较例如:
private static void SelectSort(int[] arr) {
/* 利用选择排序对数组进行排序
这里写成length-1和length是一样的,因为下面j=i+1,是刚好可以判断到最后一个数的
如果写写length的话,当i等于数组中的最后一个数的下标时候,里层的for循环是不会执行的
因为条件不成立,所以这里写成length-1和length是一样的*/
for (int i = 0; i < arr.length - 1; i++) {
// 这里写成j=i+1是因为当选出左边的时候,就不在对左边的数进行判断
for (int j = i + 1; j < arr.length; j++) {
// 如果相邻的两个数,左边的比右边的大,就交换他两的位置,把较大数移动到最后去
if (arr[i] > arr[j]) {
// 利用a^b^b=b和a^b^a=b的特点来交换两个数的值
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
}
// 打印
System.out.println("对数组进行选冒泡序后的顺序是:" + Arrays.toString(arr));
}
冒泡排序:
就是数组中两个相邻的元素进行比较,将较大的移动右边,小的移动到左边,这样一直比较,直到比较到最后一个元素,
就可以把最大的元素移动到右边去,然后由于外层的i每次都是自减,所以每次都可以不进行最后i个数比较,因为i个数是
已经拍好序的
private static void BubleSort(int[] arr) {
// 利用冒泡排序对数组进行排序
// 让i的值等于数组的长度减一,然后每次自身都减一,这样就可以不进行最后已经排好序的i个数
for (int i = arr.length - 1; i > 0; i--) {
// 让j小于i,每次都不去判断已经排好序的数,增加效率
for (int j = 0; j < i; j++) {
// 如果相邻的两个数,左边的比右边的大,就交换他两的位置,把大数移动到最后去
if (arr[j] > arr[j + 1]) {
// 利用a^b^b=b和a^b^a=b的特点来交换两个数的值
arr[j] = arr[j] ^ arr[j + 1];
arr[j + 1] = arr[j] ^ arr[j + 1];
arr[j] = arr[j] ^ arr[j + 1];
}
}
}
// 打印
System.out.println("对数组进行选择排序后的顺序是:" + Arrays.toString(arr));
}