关于排序以及查找方法

一、排序

    1、冒泡

        冒泡排序可以说是最简单的一种排序算法了,从字面上就可以看出来大概的意思,就是说,当我们从小到大排序的时候,我们将相邻的两个数进行比较,如果i < i - 1,就将 i 的值与 i - 1 的值进行替换,依次类推,继续比较 i 与 i + 1,当我们比较到最后面的时候,必定是最大值,直接看看代码吧

        

         

        说白了,就是大换小,然后循环n - 1 次,因为最后的一次是不许要比较的,或者说以及比较过了

    2、选择排序

        其他的排序都算是稍微麻烦一点的排序方法,选择排序必须有一个作为排序比较的值,可以随意选择,然后从头到尾依次比较,遇到比你选择的数值大的,就直接替换掉,然后继续往下比较,最后也是最大的会排到最后面

        

        

        可以看出来其实和冒泡排序没有太大的区别,他们的区别就在于,冒泡排序比较的是两个相邻的数之间的大小,而选择排序则是比较了全部的数据之后,在进行第二次比较,只是概念上的不同,至于底层有没有不同我现在暂时还没有考虑,至少目前而言,区别是很小的,网上写的都是将下角标记录下来最后再查看下角标是否变化,但是我感觉归根到底还是我这种写法(个人意见,大家不用看这个)

    3、插入排序

        插入排序就比较有意思了,这个算是还可以吧,因为他的排序方式与前面两个是有区别的,这个可不得了了,因为他是从头开始,比较的次数依次增加,前面两个都是比较次数依次减少,但是这个方法好的一点就是可以减少比较次数,因为当你比较到后面的时候其实前面已经基本上都比较完成,也就是说,我们可能会用很少的比较次数就将数组完整的比较出来

        

        

    3-2、折半插入排序

        

        

        

        从上面的打印结果我们就可以看出来,折半插入是在判断了插入位置之后,如果需要插入,那么记住当前位,并继续查询最高位和最低位之间是否还有符合判断条件的位置,如果有,那么更改插入位,如果没有,将插入位之后整体后移一位,并将当前数据插入记录的插入位置

    4、快速排序

        这个是我今天写的四中排序中最难的一种了,因为这个涉及的逻辑还是比较复杂的,他的比较方式其实是从中间开始,向两边排序,就跟二分法查找有点相似,将数组多次分为两段,每次都在各自的区域中排序

        

        

        这个就相当于重复去二分排序,当左边完全排序完成以后就会去到右边继续进行排序,而且我们需要注意的是,在比较的时候必须先比较右边然后在比较左边,因为会导致有些数据无法比较,甚至报错,最后两行的意思是第一行比较的是从0到n-1,第二行比较的是从n+1到length

    注:一次的排序并不能代表什么,大家可以多试几次不同的数组数据,然后进行数据分析,就知道哪个好用哪个不好用了,毕竟理论和实战还是有区别的

二、查找 

    1、二分法查找

        首先就是我们最熟悉的二分法查找了,这个我之前在写排序的时候提到一嘴,二分法是用到最多的一种查找方式,他是通过从中间开始向两边查找的方式进行查询的,和快速排序有些相似,因为二分法需要先进行排序,所以我就直接使用冒泡吧

        

         

         

    2、直接查找

        这个应该不用过多说明了,就是我们平常使用的循环然后查找

        

        

   3、插值自适应查找法

        这个我也是看了大神的博客才知道有这种方法,因为按照1/2的比例去折半查找,那么有点死板了,所以需要一个方法去定义查找的位置比例

        

        

        

        可以看出来,比二分查找方法是减少了查询次数的