zoukankan      html  css  js  c++  java
  • 选择排序

    【1】选择排序理论

    (1)基本概念

    选择排序的时间复杂度为O(n*n)。(参见《算法复杂度》)

    选择排序是不稳定的排序方法(参见《常用排序算法稳定性分析》)。

    选择排序最大的优点是赋值的次数少,这个是其它算法无法比拟的。

    (2)排序逻辑

    每一趟从待排序的数据元素中选出最小(或最大)的一个元素;

    顺序放在已排好序的数列的最后;

    直到全部待排序的数据元素排完。

    【2】选择排序过程

    示例如下:

    初始关键字    [49 38 65 97 76 13 27 49]

    第一趟排序后 13  [38 65 97 76 49 27 49]

    第二趟排序后 13 27 [65 97 76 49 38 49]  

    第三趟排序后 13 27 38  [97 76 49 65 49]

    第四趟排序后 13 27 38 49  [76 97 65 49 ]  

    第五趟排序后 13 27 38 49 49  [97 65 76]

    第六趟排序后 13 27 38 49 49 65  [97 76]

    第七趟排序后 13 27 38 49 49 65 76  [97]

    最后排序结果 13 27 38 49 49 65 76  97

    【3】C++实现选择排序

    示例代码如下:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 #define   MAXSIZE     12
     5 #define   SWAP(x,y)   {int t; t=x; x=y; y=t;}
     6 
     7 void ShowArray(int br[])
     8 {
     9     for(int i = 0; i < MAXSIZE; ++i)
    10     {
    11         cout<<br[i]<<"  ";
    12     }
    13     cout<<endl;
    14 }
    15 
    16 void SelectSort(int br[],int n)
    17 {
    18     for(int i = 0; i < n; ++i)
    19     {
    20         int k = i;
    21         for(int j = i + 1; j < n; ++j)
    22         {
    23             if(br[k] > br[j])
    24             {
    25                 k = j;
    26             }
    27         }
    28         if(k != i)    //比较完后发现还是"自己"最小 即k == i就没有必要再执行交换
    29         {
    30             SWAP(br[k], br[i]);
    31         }
    32     }
    33 }
    34 
    35 void main()
    36 {
    37     int ar[MAXSIZE] = {23,34,45,78,90,12,49,92,32,19,46,8};
    38     ShowArray(ar);
    39     SelectSort(ar,MAXSIZE);
    40     ShowArray(ar);
    41 }
    42 
    43 /*
    44 23  34  45  78  90  12  49  92  32  19  46  8
    45 8  12  19  23  32  34  45  46  49  78  90  92
    46  */

     【4】选择排序到底是稳定还是不稳定排序?

    举个例子:序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了。

    所以,选择排序不是一个稳定的排序算法。

     

    Good Good Study, Day Day Up.

    顺序  选择  循环  坚持  总结

    作者:kaizen
    声明:本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此声明,且在文章明显位置给出本文链接,否则保留追究法律责任的权利。
    签名:顺序 选择 循环
  • 相关阅读:
    SQL SERVER 2008的元数据视图
    SQL Server 2008 中的 XML 功能
    SQL SERVER 2008的层次结构支持
    C#打包程序
    SQL SERVER 2008的top增强
    SQL SERVER导出数据字典
    SQL SERVER 2008的转置函数PIVOT
    SQL SERVER 2008的SQLCMD模式
    SQL SERVER 2008传递表值参数
    SQL Server 2005导出表中数据的SQL脚本形式(即INSERT语句)
  • 原文地址:https://www.cnblogs.com/Braveliu/p/2852535.html
Copyright © 2011-2022 走看看