一个小菜比的记录笔记,如有说错烦请指正
最近花了几天时间来学习数组排序,今天记录第一个排序算法,直接选择排序
思想如下:
第一次循环:
假设第0位是最小值,用第0位与其他所有位的元素比较,如果第N位比第0位小则将 第0位与第N位交换,以此类推,找出第一轮最小值,赋值到第0位。
第二次循环:
不看第0位的值,将最小值变为第1位,用最小值与其他位的元素进行比较,如果第N位比第1位小(此轮排除第0位),则将第1位与第N位交换,以此类推,找出本轮除第0位最小值,赋值至第1位。
第三次循环:
以此类推
思想简单,代码也简单:(由代码可知,时间复杂度为O(n2)
//赋值一个随机数组 int[] numberArr = new int[10]; for (int i = 0; i < numberArr.length; i++) { numberArr[i] = (int) (Math.random() * 99 + 1); } System.out.println("排序前:" + Arrays.toString(numberArr)); /* * 遍历数组 */ for (int i = 0; i < numberArr.length; i++) { //假设最小位是当前位 int min = numberArr[i]; //取出最小位下标 int index = i; for (int j = i + 1; j < numberArr.length; j++) { //如果最小位 大于 数组的第j位,则最小位变为第j位 if (min > numberArr[j]) { min = numberArr[j]; //将下标改为最小位 index = j; } } /* *如果 index 不是 i 说明最小位已不是当前位 * 所以将最小位交换到当前位 *如果 index 是 i 则说明 数组第i位是最小位,则不需要交换 */ if (index != i) { int temp = numberArr[i]; numberArr[i] = numberArr[index]; numberArr[index] = temp; } } System.out.println("排序后:" + Arrays.toString(numberArr));