Java简单排序之选择排序

排序原理:

1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处 的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引
2.交换第一个索引处和最小值所在的索引处的值

图片展示选择排序.png

代码实现:

    public static void selectionSort(int[] a) {
        System.out.println("待排序数据: " + Arrays.toString(a));
        for (int i = 0; i < a.length - 1; i++) {
            //默认把数据的第一个元素当做最小值
            int minIndex = i;
            //每次排完序之后,第一个元素就是最小值了,所以每次比较的起始位置为i+1
            for (int j = i + 1; j < a.length; j++) {
                if (a[minIndex] > a[j]) {
                    //如果有比最小值小的,把当前index赋值给最小值
                    minIndex = j;
                }
            }
            if (minIndex != i) {//如果最小索引和当前遍历的索引一样,则不需要交换位置
                int temp = a[i];
                a[i] = a[minIndex];
                a[minIndex] = temp;
            }
            System.out.println("第" + (i + 1) + "轮排序后的数组为: " + Arrays.toString(a));
        }
    }
排序结果:
待排序数据: [4, 5, 6, 3, 2, 1]
第1轮排序后的数组为: [4, 5, 3, 2, 1, 6]
第2轮排序后的数组为: [4, 3, 2, 1, 5, 6]
第3轮排序后的数组为: [3, 2, 1, 4, 5, 6]
第4轮排序后的数组为: [2, 1, 3, 4, 5, 6]
第5轮排序后的数组为: [1, 2, 3, 4, 5, 6]

选择排序的时间复杂度分析:

选择排序使用了双层for循环,其中外层循环完成了数据交换,内层循环完成了数据比较,所以我们分别统计数据 交换次数和数据比较次数:
数据比较次数:
(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)*(N-1)/2=N^2/2-N/2;
数据交换次数:
N-1 时间复杂度:N^2/ 2-N/2+(N-1)=N^2/2+N/2-1;
根据大O推导法则,保留最高阶项,去除常数因子,时间复杂度为O(N^2);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,910评论 2 9
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,281评论 0 4
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,533评论 0 5
  • 索引的基本原理,以及数据是如何被访问的 (一)SQLS如何访问没有建立索引的数据表 Heap译成汉语叫做“堆”,其...
    安易学车阅读 3,524评论 0 8
  • 与先生相识,是经人介绍的。 与先生相知,是朝夕相处的相濡以沫。 那时,我还是一名幼儿老师。工作在幼儿园,已经是一名...
    上午咖啡下午茶阅读 559评论 2 8