算法分析(三)选择排序

本贴最后更新于 2702 天前,其中的信息可能已经时异事殊

选择排序算法(泛型)

遍历无序数组 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,因此没有达到排序效果。

最后:感谢刘宇波老师的指导!

算法并不无趣,努力提高自己。坚持!加油!

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...