需求:使用另一种排序算法,给数组{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博客!