选择排序算法(泛型)
遍历无序数组 arr,定义一个初始的最小值所在位置的索引变量 minIndex=i,
循环 begin:
1. 从arr[i]开始,拿arr[i+1]和arr[i]比较大小; 2. 如果arr[i+1]>arr[i],则将i+1赋给minIndex,否则minIndex=i; 3. 对数组根据大小将i+1和i的位置的元素进行位置交换。
循环 End。
代码:
public class SortSelectionAlgorithm { public static <T extends Comparable<T>> T[] sortSelection(T arr[]) { if (arr != null && arr.length > 0) { int n = arr.length; for (int i = 0; i < n; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) { if (arr[j].compareTo(arr[minIndex]) > 0) {//小于0从小到大排 minIndex = j; } swapArr(arr, i, minIndex);//其实就是交换i和j } } } return arr; } private static <T> void swapArr(T arr[], int aIndex, int bIndex) { T temp = null; temp = arr[aIndex]; arr[aIndex] = arr[bIndex]; arr[bIndex] = temp; } } -------------------------------------------------------------------- public class SortObject implements Comparable<SortObject> { private String userName; private int age; public SortObject() { super(); // TODO Auto-generated constructor stub } public SortObject(String userName, int age) { super(); this.userName = userName; this.age = age; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "SortObject [userName=" + userName + ", age=" + age + "]"; } @Override public int compareTo(SortObject o) { int result; if (this.age != o.age) { result = this.age - o.age; return result; } else { if (!this.userName.equals(o.getUserName())) { result = this.userName.compareTo(o.userName); System.out.println("result=== " + result); return result; } else { return 0; } } } }
总结:期间犯了一个错误,因为 minIndex 初始值是 i,我便将 j 和 minIndex 进行了交换,但其实 minIndex 已经可能在循环中被赋值 j,因此没有达到排序效果。
最后:感谢刘宇波老师的指导!
算法并不无趣,努力提高自己。坚持!加油!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于