排序算法-选择排序(可视化动图)
选择排序
最简单,也是最没用的排序算法,没用是因为选择排序的时间复杂度高并且还是不稳定的排序方法,项目中很少会用到
算法介绍
- 在一个长度为 N 的无序数组中,第一次遍历 n-1 个数找到最小的和第一个数交换。
- 第二次从下一个数开始遍历 n-2个数,找到最小的数和第二个数交换。
- 重复以上操作直到第 n-1 次遍历最小的数和第 n-1 个数交换,排序完成。
算法可视化
实现代码
算法实现 Selection.java
package sort.selection; import sort.utils.SortUtils; /** * 选择排序 * 英文名称: Selection * @author: liuxiangyu * @date: 2020/7/28 23:37 */ public class Selection { public static void main(String[] args) { // 获取随机数组 int[] array = SortUtils.getArray(10); long startTime = System.currentTimeMillis(); for (int i = 0; i < array.length -1 ; i++) { // 最小值位置 int minPos = i; for (int j = i+1; j < array.length; j++) { // 最小值位置之后的值和最小值位置的值比,如果小于最小值,则将该值的位置设置为最小值位置 if (array[j] < array[minPos]){ minPos = j; } } // 交换位置 SortUtils.exchange(array,i,minPos); } long endTime = System.currentTimeMillis(); // 打印排序后数组 SortUtils.printlnArray(array); System.err.println("数组长度:" + array.length + " 用时:" + (endTime - startTime) +"毫秒"); } }
工具类 SortUtils.java
package sort.utils; /** * @author: liuxiangyu * @date: 2020/7/29 00:02 */ public class SortUtils { /** * 获取一个随机数组 * @return */ public static int[] getArray(int num){ int[] intArray = new int[num]; for (int i = 0; i < num; i++) { intArray[i] = new Double(Math.random()*num * 10).intValue(); //intArray[i] = i; } return intArray; } /** * 打印数组 * @param intArray */ public static void printlnArray(int[] intArray){ for (Integer integer : intArray) { System.err.print(integer +" "); } System.err.println(); } /** * 交换数组两个位置的值 * @param array * @param i * @param j */ public static void exchange(int[] array,int i,int j){ int temp = array[i]; array[i] = array[j]; array[j] = temp; } }
下一篇:
数据结构中的栈,堆和队列