美文网首页
选择排序

选择排序

作者: 不服输的小蜗牛 | 来源:发表于2020-06-19 17:39 被阅读0次

    选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    我们还是以数据 int[] arr = {3, 1, 4, 2}; 为例

    第一轮循环

    我们定义一个默认角标值int minIndex,来存储最小元素角标,默认等于当前循环的起始值也就是minIndex=0,
     第一次比较:minIndex和角标1 去比较,发现角标minIndex的元素大于角标1的元素,
     此时我们把角标1赋值给我们的默认角标值,此时minIndex=1
     第二次比较:我们让角标minIndex和角标2 去比较,minIndex的元素小于角标是2的元素,不做任何处理
     第三次比较:我们让角标minIndex和角标3比较,minIndex的元素小于角标是3的元素,不做任何处理
     第一轮比较下来,我们找到了最小元素的角标,
     我们让角标为0的元素和角标为minIndex的元素交换位置。此时数据为[1,3,4,2]
    

    第二轮比较:

     第一次比较:由于角标0的值已经是数组中最小的值,我们第二轮比较时,直接把角标1设置为minIndex的值 minIndex=1,
     然后让minIndex和角标2的元素进行比较,角标为2的元素大于角标minIndex的值不做任何处理,[1,3,4,2]
     第二次比较:角标minIndex和角标为3的元素比较,发现角标为3的元素小于角标为minIndex的元素,把minIndex的值设置为3
     然后我们把角标为1的元素和角标为3的元素换下位置,此时数组为[1,2,4,3]
    

    第三轮比较:

     这一次我们的minIndex=2了,前面数据都已经排好序了,
    我们比较下 minIndex和角标3,发现角标3的元素大于角标minIndex的元素,
    把角标3赋值给minIndex,minIndex=3。
    角标为2的数据和角标为3的数据交换。此时数组为[1,2,3,4] ,到此我们的循环就结束了。
    
    如果我们有N个数据的话,我们一共执行了N-1轮的循环,每轮循环起始位置比上次循环多一个角标,代码实现如下,
    
    
         *
         * @param arr
         */
        public static void selectionSort(int[] arr) {
    
            for (int i = 0; i < arr.length - 1; i++) {
    
                int minIndex = i;
                for (int j = i + 1; j < arr.length; j++) {
                    if (arr[minIndex] > arr[j]) {
                        minIndex = j;
                    }
                }
    
                int temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
    
            }
        }
    

    相关文章

      网友评论

          本文标题:选择排序

          本文链接:https://www.haomeiwen.com/subject/mnwmxktx.html