zoukankan      html  css  js  c++  java
  • 数据结构:四种排序的比较

    对大数据进行排序时,冒泡排序、选择排序、奇偶排序、插入排序的效率不相同

    各种排序的代码:

    冒泡排序:

    View Code
    1 public void bubbleSort()
    2       {
    3       int out, in;
    4 
    5       for(out=nElems-1; out>1; out--)   // outer loop (backward)
    6          for(in=0; in<out; in++)        // inner loop (forward)
    7             if( a[in] > a[in+1] )       // out of order?
    8                swap(in, in+1);          // swap them
    9       }  // end bubbleSort()

     

    选择排序:

    View Code
     1 public void selectionSort()
     2       {
     3       int out, in, min;
     4 
     5       for(out=0; out<nElems-1; out++)   // outer loop
     6          {
     7          min = out;                     // minimum
     8          for(in=out+1; in<nElems; in++) // inner loop
     9             if(a[in] < a[min] )         // if min greater,
    10                 min = in;               // we have a new min
    11          swap(out, min);                // swap them
    12          }  // end for(out)
    13       }  // end selectionSort()

    奇偶排序:

    View Code
     1 public void oddEvenSort()//奇偶排序
     2   {
     3       boolean flag = false ;//用作标志
     4       while(!flag)
     5       {
     6           flag = true ;
     7           for(int i=1 ; i<a.length-1 ; i+=2)//奇数
     8           if(a[i]>a[i+1])
     9           {
    10               swap(i,i+1) ;
    11               oddScanNum++ ;
    12               flag = false ;
    13           }
    14           
    15           for(int i=0 ; i<a.length-1 ; i+=2)//偶数
    16           if(a[i]>a[i+1])
    17           {
    18               swap(i,i+1) ;
    19               evenScanNum++ ;
    20               flag = false ;
    21           }
    22       }
    23    }

     

    插入排序:

    View Code
     1 public void insertionSort()
     2       {
     3       int in, out;
     4 
     5       for(out=1; out<nElems; out++)     // out is dividing line
     6          {
     7          long temp = a[out];            // remove marked item
     8          in = out;                      // start shifts at out
     9          while(in>0 && a[in-1] >= temp) // until one is smaller,
    10             {
    11             a[in] = a[in-1];            // shift item to right
    12             --in;                       // go left one position
    13             }
    14          a[in] = temp;                  // insert marked item
    15          }  // end for
    16       }  // end insertionSort()

    对数据大小为10^4 ~ 10^5 进行排序,各种排序的所需的时间如下所示:

    可以得出结论:对数据量不大时,四种排序所需的时间都差不多;对大数据时,四种排序所需的时间的比较为:冒泡排序<选择排序≈奇偶排序<插入排序

     

     

     

  • 相关阅读:
    视频:JDBCRDD源码及自定义JDBCRDD的分区策略
    聊聊spark-submit的几个有用选项
    线性求第k大
    汇编基础 第一章_总线
    长度不超过n的连续最大和___优先队列
    ISAP
    次小生成树
    k短路
    求出欧拉回路,欧拉路径
    拓扑排序bfs_dfs
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/2752079.html
Copyright © 2011-2022 走看看