算法图解之选择排序(JAVA版本)

阅读这篇文章就证明已经开始踏上了算法的修仙之路,接下来我会两天一更,介绍图解算法里面的算法的实现, 适合Java程序员阅读。


前言

提示:这里可以添加本文要记录的大概内容:

例如: 这里需要数组,链表和大O表示法的基础, 可以自行百度查找,锻炼自己阅读的能力


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用工具

记笔记:用Typora, 个人觉得做笔记用这个够用了,一定要学会的技能
写代码:idea 社区版 或者其他也行,不影响学习算法

二、介绍两种存储方式

图示:

1.链表
请添加图片描述
2.数组
请添加图片描述

总结:

大O表示法指的是程序运行的时间,这个时间是增速而不是真正耗时
O(1): 常量时间
O(n): 线性时间

数组和链表其实各有优点, 
当然在学习Java的用的最多的是数组,
但是学习到数据结构的时候可能就需要链表了,
所有两者都需要掌握。

三、实现选择排序

介绍

选择排序: 你可以把它当作一个打扑克时候你抓牌的时候,如何要整理
你手上的牌? 这个问题可以身临其境想想,这样你可以加深对排序的
理解

掌握选择排序的作用:
1. 选择排序并不是最快, 运行时间为O(n2)  n2表示n的平方
而快速排序的运行时间为(nlogn)
2.掌握几种排序之后,学习其他排序的时候也能更快上手 

代码实现

/**
* 例子: 排序 myList = {5,3,6,2,10,1,3,11,7,1}
*/
public class selection_sort {

    public static void main(String[] args){
        //待排序的数组 -> 考虑到重复元素
        Integer[] myList = new Integer[]{5,3,6,2,10,1,3,11,7,1};
        System.out.println("数组的长度 = " + myList.length);
        //对数组重新进行排序
        selectSort(myList);
        //打印函数
        print(myList);
    }
    //实现选择排序
    private static void selectSort(Integer[] myList) {
        //最小元素索引
        Integer smallestItemIndex = null;

        for(int i = 0; i < myList.length; i++){
            smallestItemIndex = i;
            //每次都会选出一个最小值
            for(int j = i; j < myList.length; j++){
                //选择最小元素的索引
                if(myList[smallestItemIndex] > myList[j]){
                    smallestItemIndex = j;
                }
            }
            //判断最小元素的索引是否发生改变了  -> 交换法
            if(smallestItemIndex != i){
                Integer temp = myList[smallestItemIndex];
                myList[smallestItemIndex] = myList[i];
                myList[i] = temp;
            }
        }
    }

    // 打印结果
    private static void print(Integer[] myList) {
        for(int i = 0; i < myList.length; i++){
            System.out.print(myList[i] + "->");
        }
        System.out.println("null");
    }
}

结果

请添加图片描述

总结

对于学习算法,之前我也是一头雾水,
之后就买了图解算法准备入门,也可以为后面学习
框架了解底层做打算,也可以顺手准备之后的蓝桥杯。 
希望大家也多去学习算法,将生活的各个细节与算法结合,将会事半功倍
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值