继上篇文章讲到插入排序和冒泡排序算法。这次来看一下选择排序。
和上两个循环一样,还是分成两套循环,外循环起指针作用,用来指定每次循环的元素值和元素序列,而内部循环则起到真正的快速排序逻辑。首先如果我们取到第i值,那么我们要与第i+1,i+2,....等元素进行对比,找到i元素后面最小的元素,与之交换位置即可,只不过这里的交换位置比较新颖,我们看下面的代码:
package cn.tgb.sort; import java.util.Arrays; //选择排序 public class SelectionSort { // 生成随机数 private static int[] input = new int[] { (int) (Math.random() * 100), (int) (Math.random() * 100), (int) (Math.random() * 100), (int) (Math.random() * 100), (int) (Math.random() * 100),(int) (Math.random() * 100),(int) (Math.random() * 100)}; public static void main(String[] args) { //先打印出随机数元素序列 System.out.println(Arrays.toString(input)); //外循环起到指针作用 for (int i = 0; i < input.length - 1; i++) { //首选记录第一次循环 指针的元素值 int key = input[i]; //指针序号 int index = i; // 比较当前值和下一个值的关系,记录下较小值的值和索引数,用于交换。 for (int j = i + 1; j < input.length; j++) { //如果指针元素值小于后面的元素值,值不变,否则交换值 key = key < input[j] ? key : input[j]; //如果指针元素值小于后面的元素值,序号不变,否则交换序号 index = key < input[j] ? index : j; } //指针找到最大值的位置,变成了指针元素值 input[index] = input[i]; //当前指针的值,变成了最小值key input[i] = key; //打印每次排序的结果 System.out.println("第" + (i + 1) + "次排序"); for (int k = 0; k < input.length; k++) { System.out.print(input[k] + " "); } System.out.println(" "); } } }
执行结果如下图所示:
在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
综上,冒泡排序,插入排序和选择排序,根据元素序列的不同情况,来选择合适的排序算法。
时间: 2024-11-02 23:46:00