Java再学习-算法之选择排序

来源:互联网 发布:网络存在安全隐患 编辑:程序博客网 时间:2024/06/05 14:43

        继上篇文章讲到插入排序和冒泡排序算法。这次来看一下选择排序。

        和上两个循环一样,还是分成两套循环,外循环起指针作用,用来指定每次循环的元素值和元素序列,而内部循环则起到真正的快速排序逻辑。首先如果我们取到第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];//当前指针的值,变成了最小值keyinput[i] = key;//打印每次排序的结果System.out.println("第" + (i + 1) + "次排序");for (int k = 0; k < input.length; k++) {System.out.print(input[k] + " ");}System.out.println(" ");}}}

执行结果如下图所示:





在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
   


          综上,冒泡排序,插入排序和选择排序,根据元素序列的不同情况,来选择合适的排序算法。


1 0