zoukankan      html  css  js  c++  java
  • 小白懂算法之选择排序

    一.选择排序原理

      假设有10个数。

      第一轮循环,第一个数和第二个数比较,如果第一个数大,第一个数和第二个数交换位置,否则不动;接着第一个数和第三个数比较,如果第一个数大,第一个数和第三个数交换位置,否则不动……第一个数和第十个数比较,如果第一个数大,第一个数和第十个数交换位置,否则不动。第一轮循环结束,最小的数挪到了第一个数的位置,比较进行了9次。
      第二轮循环,第二个数和第三个数比较,如果第二个数大,第而个数和第三个数交换位置,否则不动……第二个数和第十个数比较,如果第二个数大,第二个数和第十个数交换位置,否则不动。第二轮循环结束,第二小的数挪到了第二个数的位置,比较进行了8次。
      ……
      第九轮循环,第九个数和第十个数比较,如果第九个数大,第九个数和第十个数交换位置,否则不动。第九轮循环结束,倒数第二小的数挪到了倒数第二个的位置,比较进行了1次。

      总结:假设序列中有n个数,当前元素与它后面的元素逐一比较,比较结果要么交换数值,要么不动。

        1.比较的最大轮数为n-1轮

        2.第一轮比较的次数为n-1次,第n-1轮比较1次。

        3.每轮比较后都会确定一个最值,该值不参与到下轮的比较中

        4.除第一轮外,每轮的当前元素位置都是前一轮元素位置+1

    二.图解

     

     三.代码实现

      语言采用Java来实现

        /**
         *     选择排序方法
         * @param arr:需要排序的序列
         * @return
         */
        public static int[] ChoiceSortByFor(int[] arr) {
            /**
             *     实现思路:双重循环
             *         1.最外层的次数最大为 arr.length -1
             *         2.内层的第一次比较次数为arr.length -1,之后每轮比较次数-1,每轮当前元素的位置是上轮位置+1
             *         3.若当前值大于后面值,则交换位置,否则不冻港
             */
            int temp = 0; //两者交换的中间值
            for(int i=0;i<arr.length-1;i++)    //最外层的次数最大为 arr.length -1
                for(int j=i;j<arr.length-1;j++) {    //内层的第一轮比较次数为arr.length -1,之后每轮比较次数-1,每轮当前元素的位置是上轮位置+1
                    //若当前值大于后面值,则交换数值
                    if(arr[i]>arr[j+1]) {
                        temp = arr[i];
                        arr[i] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            return arr;
        }

      main方法测试:

        public static void main(String[] args) {
            //创建一个需要排序的数组
            int[] arr = new int[] {520,1314,618,1111,521,666,38};
            
            //调用选择排序的方法,返回一个排序后的序列
            int[] sortedArr = ChoiceSortByFor(arr);
            //遍历序列
            for(int i=0;i<sortedArr.length;i++) {
                System.out.print(sortedArr[i]+" ");
            }
            
        }

     https://blog.csdn.net/weixin_39294633/article/details/80231033

  • 相关阅读:
    直接选择排序(C++模版技术实现)
    求素数
    快速排序(C++模版技术实现)
    堆排序(C++模版技术实现)
    简单链式二叉树(C++模版技术实现)
    归并排序(C++模版技术实现)
    求斐波那契数列的两种解法
    C++中改变setw(n)的对齐方式
    C中的64位整型
    Windows版GCC之TDMGCC 4.5.2
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13967963.html
Copyright © 2011-2022 走看看