础算法--排序: 之选择排序

三种简单排序的区别:

     冒泡排序是 未排序部分,相邻元素之间两两比较移动,从而找出最值。

     插入排序是 某个待排序元素与以排元素两两比较,   从而找到待排元素所应在的位置

     选择排序是 在未排部分,一次遍历找到最大值,然后将其置于未排部分的末尾位置。

     选择排序、冒泡排序,都是遍历未排序部分, 所不同的是:

     选择排序,遍历时,不进行移动,而是标记出最大值所在的索引

     而冒泡排序,遍历时,两两比较,移动频繁。

     因此,选择排序的效率要高于冒泡排序。

     以下是摘自网络上的图示:

  

  

   各种排序算法实现的关键:

     在设计各个具体算法代码时, 关键之处是弄清楚 哪些元素是未排的,哪些元素是已经排好的。

     即分清: 未排元素 与 以排元素的分界线

   程序代码:

[cpp] view plaincopy

  1. void StraightSelectionSort(int *p, int n)  
  2. {  
  3.     int i,j,t;  
  4.     int indexMax;  
  5.   
  6.     for (i=0;i<n;i++)  // 0....n-1  
  7.     {  
  8.         // 未排元素 0...n-1-i   以排元素 n-i...n-1  
  9.         for (j=0,indexMax=0;j<n-i;j++)  
  10.         {  
  11.             if (p[j]>=p[indexMax])  
  12.             {  
  13.                 indexMax=j;  
  14.             }  
  15.         }  
  16.   
  17.         t=p[n-i-1];  
  18.         p[n-i-1]=p[indexMax];  
  19.         p[indexMax]=t;  
  20.     }  
  21. }  

猜你喜欢

转载自blog.csdn.net/shenhua969/article/details/24985415