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)的时间级

  • 相关阅读:
    电磁学10.安培环路定律
    电磁学9.毕奥-萨法尔定律与高斯磁定理
    电磁学8.磁场中的运动电荷
    C语言-指针
    Windows和Linux的简单对比
    电磁学7.磁场与洛伦兹力
    睡眠呼吸机-呼吸触发相关算法
    电磁学6.电流与电动势
    code的用法
    字符串处理
  • 原文地址:https://www.cnblogs.com/yydeyi/p/4453359.html
Copyright © 2011-2022 走看看