数据结构:四种排序的比较

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

各种排序的代码:

冒泡排序:

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 进行排序,各种排序的所需的时间如下所示:

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

 

 

 

原文地址:https://www.cnblogs.com/KeenLeung/p/2752079.html