美文网首页
冒泡排序与选择排序

冒泡排序与选择排序

作者: 仲达_dc6c | 来源:发表于2018-11-28 11:56 被阅读0次

    今天开始,我就把自己学习的过程记录下来,避免自己学了之后就忘记了,让自己能够坚持下去,希望会有所收获。

    数据结构,包含两个方面:

    逻辑结构:集合结构,线性结构,树形结构,图标结构。

    存储结构:表,堆栈,队列,数组,树,二叉树,图。二叉树和图我还不知道怎么回事,以后学了在总结。

    我好像总结完事了,但是好像什么也没说似的,看来要经常写才行,语言组织的不好。

    算法

    要完成一个功能,你是怎么做到的,你的思路就是算法。

    衡量的几个标准

    空间复杂度:代码行数

    时间复杂度:排序的个数n,以及for循环,数据交换。执行的效率

    O(n):

    O(n)=n²+n+100 =>n²

    O(n)=n³+n²+n=>n³

    应用场景:这个也是比较重要的,比方说10个整数的数组使用Arrays.sort(array)进行排序,就不太妥当,里面实现的空间复杂度太大,100多行的代码,就排序10个数这不一定是最好的。应该使用冒泡或者是选择排序。

    冒泡排序

    思想:1.如同烧开水,水泡向上咕噜咕噜越来越大。每次比较相邻的两个数据,将大的向后靠。

    代码如下:

    for(int I = 0;i<array.length-1;i++){

        if (array[i] > array[i+ 1]) {

            swap(I,i+1);    

        }

    }

    2.这样循环一次之后,最大的数就到了数组的最后了。

    将这样的操作执行array.length-1次,就冒泡结束了。

    for(int j=array.length-1;j>0;j--){

        for(int I = 0;i<j;i++){

            if (array[i] > array[i+ 1]) {

                swap(I,i+1);

        }

    }

    }

    时间复杂度:第一次需要n-1个数比较,第二次需要n-2次比较,最后两个数比较1次就好了

    O(n)=(n-1)+(n-2)+....+1=((n-1)+1)*(n-1)/2=n*(n-1)/2

    这样冒泡就OK了,也是可以做个优化的,可以在if里面做判断,如果没有可以交换的数据,可以提前退出外层for循环。

    选择排序

    思路:

    1.第一个数作为参考点,假设是最小的数据。在剩下的数据中遍历出来最小的数据,如果比第一个还小,那就和第一个数据进行交换位置。

    int index = 0;//参考点

    for(int I=index + 1;i<array.length-1;i++){

        if(array[I]<array[index]){

            index = I;

        }

    }

    swap(index,0);

    这样,经过一次的选择排序,就会有一个最小的数据被选出来,放到了参考点的问题位置。

    2.将参考点向后移动,在进行array.length-1次选择。

    for(int j = 0; j < array.length-1;j++){

        int index = j;

        for(int I=index + 1;i<array.length-1;i++){

            if(array[I]<array[index]){

                index = I;

            }

        }

        swap(index,j);//j 是参考点,index是遍历出来后的最小的元素,将他们互换。

    }

    时间复杂度:

    第一个参考点需要比对n-1次,第二个参考点需要比对n-2次,......比对1次

    O(n)=(n-1)+(n-2)+....+1=((n-1)+1)*(n-1)/2=n*(n-1)/2

    冒泡和选择的区别:

    冒泡:相邻的两个数据交换的次数比较频繁,但是可以提前退出外循环。

    选择:比较两个两个数的大小次数多,但是数据交换的次数少,最坏的情况是要进行n-1次交换。

    这两种排序通常使用在10个数据以内的排序,性能没什么差异。但是数据量超过10个,考虑其他排序方式。

    冒泡选择排序代码

    相关文章

      网友评论

          本文标题:冒泡排序与选择排序

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