zoukankan      html  css  js  c++  java
  • 总结 15/4/24

    冒泡排序 选择排序 插入排序

    冒泡排序核心代码:

      public void bubbleSort(){

        int out,in;

        for(out=nElems-1;out>1;out--){

          for(in=0;in<out;in++){

            if(a[in]>a[in+1]){

              long temp = a[in];

                a[in] = a[in+1];

                a[in+1]  = temp; 

          }

        }

      }

    }

    思路:1.比较两个数

       2.如果左边的数大,则两个数交换位置

       3.内层循环加一,向右移动一个位置,继续比较下面两个数

    照着这种比较形式,直到内层循环结束,虽然还没有把所有数都排好序,但是最大的数确实已经到了最右边

    外层循环减一,因为已经确定最后一个数是最大的,所以减一,把最后一个数去掉,减少接下来的比较次数 ,如此反复。

    时间复杂度:比较次数是n-1+n-2+.....+1 = n(n-1)/2;  约为n^2/2

    因为,只有前者比后者大时,才交换顺序,所以交换的次数少于比较的次数。如果数据是随机的,大概有一半数据需要交换,则交换次数为n^2/4

    比较和交换的的次数都和n^2成正比,所以为O(n^2)

    选择排序核心代码:

    public void selectSort(){

      int out,in,min

      for(out=0;out<nElems-1;out++){

        min=out;

        for(in=out+1;in<nElems;in++){

          if(a[in]<a[min]){

            min= in;

          }

        }

          long temp = a[out];

          a[out] = a[min];

          a[min]  = temp; 

        

      }

    }

    思路:外层循环用循环变量out,从数组开头开始向高位增长,内层循环用循环变量in,从out所指位的下一位开始同样是向右移动

    在每一个in的新位置,数据项a[in]和a[min]进行比较,如果a[in]更小,则min被赋值in的值。在内层循环的最后,min指向数据最小的数据项,然后交换out和min所指向的数据项

    时间复杂度:比较次数和冒泡排序是一样的为n^2/2

    交换次数要比冒泡排序少很多。因为N值很大时,比较的次数是主要的,所以和冒泡排序一样,时间复杂度是O(n^2)

    插入排序的核心代码:

    public void insertSort(){

      int out,in;
      for(out=1;out<nElems;out++){
        long temp = a[out];
        in = out;
        while(in>0 && a[in-1]>=temp){
          a[in] = a[in-1];
          --in;
        }
          a[in] = temp;
      }

    }

    思路:  局部有序,更适合用做一组数据排序排的已经差不多了

    外层循环从数据的第二个开始,左边数据认定为已经排好的

    long temp = a[out]; 将要进行比较的数据出列,腾出移动的位置

    内层的while循环是用来比较out+1个数据的左边元素是否比out+1个数据大,如果大的话,将大的数据赋值到腾出来的位置,最后将出队的数据赋值到比它大的数据的位置

    时间复杂度:比较次数为n^2/2,然而,因为在每一次排序发现插入点之前,平均只有数据项的一半真的进行了比较,所以比较次数为n^2/4

    复制的次数, 大致为比较的次数

    在任意情况下,对于随机顺序的数据进行插入排序也需要O(n^2)的时间级

  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯VIP基础练习 矩形面积交
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    核心思想:想清楚自己创业的目的(如果你没有自信提供一种更好的产品或服务,那就别做了,比如IM 电商 搜索)
    在Linux中如何利用backtrace信息解决问题
  • 原文地址:https://www.cnblogs.com/yydeyi/p/4453359.html
Copyright © 2011-2022 走看看