需求:使用另一种排序算法,给数组{23,18,31,41,11,26,5}进行排序,先上一张图来说明选择排序,手动排序之后的结果:
图是简陋了些,再上实现代码:
// 选择排序,传入两个参数,一个数组,一个排序方式:ace升序,desc降序
public static int[] selectSort(int[] arr, boolean isAce) {
// 元素取值从0开始,到arr.length结束
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) { // 内循环控制循环次数,i取值的角标,j是后一个取值的角标,两者进行比较
if (isAce) { // 升序
if (arr[i] > arr[j]) { // 如果前面的元素大,就交换位置
int temp = arr[i]; // 中间变量
arr[i] = arr[j];
arr[j] = temp;
}
} else { // 降序
if (arr[i] < arr[j]) { // 如果前面的元素大,就交换位置
int temp = arr[i]; // 中间变量
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.print("第" + (i + 1) + "次选择排序后:");
printArray(arr);
}
return arr;
}
// 打印数组显示
public static void printArray(int arr[]) {
System.out.print("{");
for (int i = 0; i < arr.length; i++) { // 遍历输出数组的每个元素
if (i == arr.length - 1) { // 取出最后一个元素,后面没有任何符号
System.out.print(arr[i]);
} else {
System.out.print(arr[i] + ",");
}
}
System.out.println("}\n");
}
测试代码:printArray打印输出的方法
public static void main(String[] aaa) {
int[] arr ={23,18,31,41,11,26,5};
System.out.print("原数组的数据:");
printArray(arr);
int[] arr2 = selectSort(arr, true);
System.out.print("选择排序后数组输出:");
printArray(arr2);
}
结果打印:就是画图的六次结果:
原数组的数据:{23,18,31,41,11,26,5}
第1次选择排序后:{5,23,31,41,18,26,11}
第2次选择排序后:{5,11,31,41,23,26,18}
第3次选择排序后:{5,11,18,41,31,26,23}
第4次选择排序后:{5,11,18,23,41,31,26}
第5次选择排序后:{5,11,18,23,26,41,31}
第6次选择排序后:{5,11,18,23,26,31,41}
选择排序后数组输出:{5,11,18,23,26,31,41}
排序算法,java的我就不再写了,学习别人写好的(非常好),转载一个java排序算法CSDN博客!