选择排序算法(泛型)
遍历无序数组 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,因此没有达到排序效果。
最后:感谢刘宇波老师的指导!
算法并不无趣,努力提高自己。坚持!加油!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于